GO的次日學習-方法聲明

這章看着有點懵懵的!!!!函數

定義

在函數聲明時,在其名字以前放上一個變量,便是一個方法。這個附加的參數會將該函數附加到這種類型上,即至關於爲這種類型定義一個獨佔的方法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

相關文章
相關標籤/搜索