乐趣区

关于golang:GO的第二天学习方法声明

这章看着有点懵懵的!!!!

定义

在函数申明时,在其名字之前放上一个变量,即是一个办法。这个附加的参数会将该函数附加到这种类型上,即相当于为这种类型定义一个独占的办法

package geometry

import "math"

type Point struct {X,Y float64}

func Distance(p,q Point) float64 {return math.Hypot(q.X-p.X,q.Y-p.Y)
}

func (p Point) Distance(q Point) float64 {return math.Hypot(q.X-p.X,q.Y-p.Y)
}

p := Point {1,2}
q := Point{5,6}
fmt.Println(Distance(p,q))
fmt.Println(p.Distance(q))

能够看到,下面的两个函数调用都是 Distance, 然而却没有发生冲突。第一个 Distance 的调用实际上调用的是包级别的函数 geometry.Distance, 而第二个则是应用刚刚申明 Point,调用的是 Point 类下申明的 Point.Distance 办法 ,这种 p.Distance 的表达式叫做选择器

退出移动版