詳解Go 語言中的方法

發(fā)布時間:2024-02-17
下面由golang教程欄目給大家介紹go 語言中的方法的理解,希望對需要的朋友有所幫助!
go 方法定義
方法是具有特殊接收器參數(shù)的函數(shù),即在 func 和方法名之間方法接收者。
func (s student) getname() string { return s.name}func (s *student) setname(name string) { s.name = name}我們可以把接收者類型為指針的成員方法叫做指針方法,把接收者類型為非指針的成員方法叫做值方法。
在你需要修改對象的時候,才必須用指針(引用傳遞),否則將所屬類型聲明為字面量即可(值傳遞)。另外避免在每個方法調(diào)用上復制該值。
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 的指針類型,我們在調(diào)用方法時,之所以可以直接在 a 實例上調(diào)用 increase 方法,是因為 go 語言編譯階段會自動將 a 轉(zhuǎn)化為對應的指針類型 &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() 其實就是 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ù)與返回值相關,所以這兩個類型相等就能證明 方法本質(zhì)上就是普通的函數(shù),而接收者就是隱含的第一個參數(shù)。
上一個:網(wǎng)站域名解析是什么意思?站長應該怎么進行域名解析?
下一個:何防治凍害、寒害和霜凍

異地戀女友來大姨媽怎么安慰
交通事故現(xiàn)場勘查需注意什么
邦崴普洱茶產(chǎn)區(qū)簡介
便攜式復合氣體檢測儀的簡述
10月10日起,進度款支付比例不得低于85%!400萬以下項目原則上留給中小企業(yè)!
手機硅膠套黑了怎么清洗,手機外面的橡膠套臟了怎樣才能變干凈
GR1210J1RT5G00_J 1210 1R現(xiàn)貨購買,鼎聲微1210 1Ω ±5% 1/2W
法定結(jié)婚年齡是多大
qq郵箱號碼怎么刪除,怎么刪除QQ郵箱聯(lián)系人
玻璃纖維增強塑料拉伸性能試驗機的用途
十八禁 网站在线观看免费视频_2020av天堂网_一 级 黄 色 片免费网站_绝顶高潮合集Videos