“求平面直角坐标系内两个点之间的距离”,这样的题目大家一定不会陌生,本篇我就帮着大家复习一下,并用Go语言把这个算法实现一下。

Go 语言的方法封装非常简单,它不需要在结构体内定义方法,而是像一个普通函数那样 在结构体外部定义,但是方法一定要体现出调用者(或叫接收器),这种定义的方法只能是该调用 者类型的对象才能调用,这体现的就是封装。方法的定义方式如下:

分别求数轴上两点间的距离(这道题你还会吗)(1)

可以看到,除了 (obj ObjT) 部分,其他与之前介绍的函数定义没有区别。这个 obj 就是表明该 方法是归属于哪个类型,只有对应类型的对象才能调用这种方法。下面我们用面向对象思想来计算 平面直角坐标系中(0,0)和(4,3)两点之间的距离。

分别求数轴上两点间的距离(这道题你还会吗)(2)

我们对于这个问题肯定不陌生,在直角坐标系内,一个点可以用一组横坐标和纵坐标来构成, 可以定义一个“Point”的结构,内部包含成员 x 和 y。

分别求数轴上两点间的距离(这道题你还会吗)(3)

想要计算 2 个点的距离,就要先定义 2 个点 p1 和 p2,然后用下面的数学公式计算就可以得到 p1 和 p2 之间的距离了。

分别求数轴上两点间的距离(这道题你还会吗)(4)

计算平方根需要借助 Go 语言 math 包中的 Sqrt 函数,其余的就都不是问题了。先不考虑面向对象的方式实现一个函数,这个函数就需要把 2 个点 p1 和 p2 都作为参数传进来,返回的结果就是 它们之间的距离。

分别求数轴上两点间的距离(这道题你还会吗)(5)

如果从面向对象的角度去实现,就要站在对象的角度去思考问题,这里的对象其实是一个点, 站在一个点的角度去求到另外一个点的距离同样可以实现题目的要求。这样的方法只需要传递一个 参数就够了。

分别求数轴上两点间的距离(这道题你还会吗)(6)

完整的代码展示如下:

分别求数轴上两点间的距离(这道题你还会吗)(7)

getDis2 就是为 Point 类型封装的方法,它只能被 Point 类型的对象调用。利用 p2 调用 getDis2 也是代表了求 p2 到 p1 的距离。执行代码,我们将可以看到心心念念的 5。

,