Golang教學專欄時協助大家介紹於語言中的方法,希望有協助的需求所幫助!
func (s Student) GetName() string { return s.name}func (s *Student) SetName(name string) { s.name = name}
我們可以把接收者類型為指標的成員方法叫做指標方法,把接收者類型為非指標的成員方法叫做值方法。
在你需要修改物件的時候,才必須用指標(引用傳遞),否則將所屬類型宣告為字面量即可(值傳遞)。另外避免在每個方法呼叫上複製該值。type Integer intfunc (a *Integer) Increase(i Integer) { *a = *a + i}func main() { var a Integer = 2 var b Integer = 2 //a.Increase(b) //(&a).Increase(b) (*Integer).Increase(&a, b) fmt.Println(a)}
&a,所以真正呼叫的程式碼是
(&a).Increase(b)。
type A struct { name string}func (a A) Name() string { a.name = "Hi! " + a.name return a.name}func main() { a := A{name: "test"} fmt.Println(a.Name()) fmt.Println(A.Name(a))}
a.Name() 其實是
A.Name(a) 的語法糖,變數a 就是所謂的方法接收者。
func NameOfA(a A) string { a.name = "Hi! " + a.name return a.name}func main() { t1 := reflect.TypeOf(A.Name) t2 := reflect.TypeOf(NameOfA) fmt.Println(t1 == t2)// true}
方法本質上就是普通的函數,而接收者就是隱含的第一個參數。
更多go技術文章,請造訪go語言教學專欄!
以上是詳解 Go 語言中的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!