十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
下面由Golang教程欄目給大家介紹Go 語言中的方法的理解,希望對(duì)需要的朋友有所幫助!
方法是具有特殊接收器參數(shù)的函數(shù),即在 func 和方法名之間方法接收者。
func (s Student) GetName() string { return s.name}func (s *Student) SetName(name string) { s.name = name}
我們可以把接收者類型為指針的成員方法叫做指針方法,把接收者類型為非指針的成員方法叫做值方法。
在你需要修改對(duì)象的時(shí)候,才必須用指針(引用傳遞),否則將所屬類型聲明為字面量即可(值傳遞)。另外避免在每個(gè)方法調(diào)用上復(fù)制該值。
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)}
該方法并不屬于 Integer 類,而是屬于指向 Integer 的指針類型,我們?cè)谡{(diào)用方法時(shí),之所以可以直接在 a 實(shí)例上調(diào)用 Increase 方法,是因?yàn)?Go 語言編譯階段會(huì)自動(dòng)將 a 轉(zhuǎn)化為對(duì)應(yīng)的指針類型 &a
,所以真正調(diào)用的代碼是 (&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()
其實(shí)就是 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 語言中函數(shù)類型只和參數(shù)與返回值相關(guān),所以這兩個(gè)類型相等就能證明 方法本質(zhì)上就是普通的函數(shù),而接收者就是隱含的第一個(gè)參數(shù)。
新聞名稱:詳解Go語言中的方法
文章地址:http://m.jiaotiyi.com/article/cgjioe.html