方法是一種帶有特殊_接收者_引數的函式。
接收者會出現在它自己的引數列表中,位於func關鍵字與方法名稱之間。
func (receiver type) MethodName(parameters) (returnTypes) {
}
只有當接收者的型別與該方法定義於相同套件時,你才能定義這個方法。
type Person struct {
Name string
}
func (p Person) Greetings() string {
return fmt.Sprintf("Welcome %s!", p.Name)
}
s := Person{Name: "Bronson"}
fmt.Println(s.Greetings())
// Output: Welcome Bronson!
接收者分成兩種:值接收者和指標接收者。
帶有值接收者的方法會對傳入值的複本進行操作,這表示方法內對接收者所做的任何修改,對呼叫者來說都不可見。
你可以使用指標接收者宣告方法,以便修改接收者所指向的值。 這類修改對方法的呼叫者來說也可見。
type rect struct {
width, height int
}
func (r *rect) squareIt() {
r.height = r.width
}
r := rect{width: 10, height: 20}
fmt.Printf("Width: %d, Height: %d\n", r.width, r.height)
// Output: Width: 10, Height: 20
r.squareIt()
fmt.Printf("Width: %d, Height: %d\n", r.width, r.height)
// Output: Width: 10, Height: 10
你可以在這裡找到幾個範例。 也可以看看這篇關於方法的簡短教學。
記得:方法就只是帶有接收者引數的函式。