詳解Go 語(yǔ)言中的方法

發(fā)布時(shí)間:2024-02-17
下面由golang教程欄目給大家介紹go 語(yǔ)言中的方法的理解,希望對(duì)需要的朋友有所幫助!
go 方法定義
方法是具有特殊接收器參數(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 語(yǔ)言編譯階段會(huì)自動(dòng)將 a 轉(zhuǎn)化為對(duì)應(yīng)的指針類型 &a,所以真正調(diào)用的代碼是 (&a).increase(b)。
其實(shí)是語(yǔ)法糖
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) 的語(yǔ)法糖,變量 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 語(yǔ)言中函數(shù)類型只和參數(shù)與返回值相關(guān),所以這兩個(gè)類型相等就能證明 方法本質(zhì)上就是普通的函數(shù),而接收者就是隱含的第一個(gè)參數(shù)。
上一個(gè):網(wǎng)站域名解析是什么意思?站長(zhǎng)應(yīng)該怎么進(jìn)行域名解析?
下一個(gè):何防治凍害、寒害和霜凍

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