這章看着有點懵懵的!!!!函數
在函數聲明時,在其名字以前放上一個變量,便是一個方法。這個附加的參數會將該函數附加到這種類型上,即至關於爲這種類型定義一個獨佔的方法code
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的表達式叫作選擇器import