您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)method在golang中的作用是什么,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。
什么是method(方法)?method是函數(shù)的另外一種形態(tài),隸屬于某個(gè)類型的方法。
method的語(yǔ)法:
func (r Receiver) funcName (parameters) (result)
receiver可以看作是method的第一個(gè)參數(shù),method并且支持繼承和重寫(xiě)。
Go中雖沒(méi)有class,但依舊有method
通過(guò)顯示說(shuō)明receiver來(lái)實(shí)現(xiàn)與某個(gè)類型的結(jié)合
只能為同一個(gè)包中的類型定義方法
receiver可以是類型的值或者指針
不存在方法重載
可以使用值或指針來(lái)調(diào)用方法,編譯器會(huì)自動(dòng)完成轉(zhuǎn)換
從某種意義上來(lái)說(shuō),方法是函數(shù)的語(yǔ)法糖,因?yàn)閞eceiver其實(shí)就是方法所接收的第一個(gè)參數(shù)(Method Value vs. Method Expression)
如果外部結(jié)構(gòu)和嵌入結(jié)構(gòu)存在同名方法,則優(yōu)先調(diào)用外部結(jié)構(gòu)的方法
類型別名不會(huì)擁有底層類型所附帶的方法
方法可以調(diào)用結(jié)構(gòu)中的非公開(kāi)字段
go version go1.12
/** * 什么是method(方法)?method是函數(shù)的另外一種形態(tài),隸屬于某個(gè)類型的方法。 * method的語(yǔ)法:func (r Receiver) funcName (parameters) (result)。 * receiver可以看作是method的第一個(gè)參數(shù),method并且支持繼承和重寫(xiě)。 */ package main import ( "fmt" ) type Human struct { name string age int } // 字段繼承 type Student struct { Human // 匿名字段 school string } type Employee struct { Human // 匿名字段 company string } // 函數(shù)的另外一種形態(tài):method,語(yǔ)法:func (r Receiver) funcName (parameters) (result) // method當(dāng)作struct的字段使用 // receiver可以看作是method的第一個(gè)參數(shù) // 指針作為receiver(接收者)和普通類型作為receiver(接收者)的區(qū)別是指針會(huì)對(duì)實(shí)例對(duì)象的內(nèi)容發(fā)生操作, // 普通類型只是對(duì)副本進(jìn)行操作 // method也可以繼承,下面是一個(gè)匿名字段實(shí)現(xiàn)的method,包含這個(gè)匿名字段的struct也能調(diào)用這個(gè)method func (h *Human) Info() { // method里面可以訪問(wèn)receiver(接收者)的字段 fmt.Printf("I am %s, %d years old\n", h.name, h.age) } // method重寫(xiě),重寫(xiě)匿名字段的method // 雖然method的名字一樣,但是receiver(接收者)不一樣,那么method就不一樣 func (s *Student) Info() { fmt.Printf("I am %s, %d years old, I am a student at %s\n", s.name, s.age, s.school) } func (e *Employee) Info() { fmt.Printf("I am %s, %d years old, I am a employee at %s\n", e.name, e.age, e.company) } func main() { s1 := Student{Human{"Jack", 20}, "tsinghua"} e1 := Employee{Human{"Lucy", 26}, "Google"} // 調(diào)用method通過(guò).訪問(wèn),就像struct訪問(wèn)字段一樣 s1.Info() e1.Info() }
關(guān)于method在golang中的作用是什么就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。