詳解golang中的method
什么是method(方法)?method是函數(shù)的另外一種形態(tài),隸屬于某個類型的方法。
method的語法:
func (r Receiver) funcName (parameters) (result)
receiver可以看作是method的第一個參數(shù),method并且支持繼承和重寫。
- Go中雖沒有class,但依舊有method
- 通過顯示說明receiver來實(shí)現(xiàn)與某個類型的結(jié)合
- 只能為同一個包中的類型定義方法
- receiver可以是類型的值或者指針
- 不存在方法重載
- 可以使用值或指針來調(diào)用方法,編譯器會自動完成轉(zhuǎn)換
- 從某種意義上來說,方法是函數(shù)的語法糖,因?yàn)閞eceiver其實(shí)就是方法所接收的第一個參數(shù)(Method Value vs. Method Expression)
- 如果外部結(jié)構(gòu)和嵌入結(jié)構(gòu)存在同名方法,則優(yōu)先調(diào)用外部結(jié)構(gòu)的方法
- 類型別名不會擁有底層類型所附帶的方法
- 方法可以調(diào)用結(jié)構(gòu)中的非公開字段
go version go1.12
/**
* 什么是method(方法)?method是函數(shù)的另外一種形態(tài),隸屬于某個類型的方法。
* method的語法:func (r Receiver) funcName (parameters) (result)。
* receiver可以看作是method的第一個參數(shù),method并且支持繼承和重寫。
*/
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,語法:func (r Receiver) funcName (parameters) (result)
// method當(dāng)作struct的字段使用
// receiver可以看作是method的第一個參數(shù)
// 指針作為receiver(接收者)和普通類型作為receiver(接收者)的區(qū)別是指針會對實(shí)例對象的內(nèi)容發(fā)生操作,
// 普通類型只是對副本進(jìn)行操作
// method也可以繼承,下面是一個匿名字段實(shí)現(xiàn)的method,包含這個匿名字段的struct也能調(diào)用這個method
func (h *Human) Info() {
// method里面可以訪問receiver(接收者)的字段
fmt.Printf("I am %s, %d years old\n", h.name, h.age)
}
// method重寫,重寫匿名字段的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通過.訪問,就像struct訪問字段一樣
s1.Info()
e1.Info()
}
以上就是詳解golang中的method的詳細(xì)內(nèi)容,更多關(guān)于golang中的method的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Golang棧結(jié)構(gòu)和后綴表達(dá)式實(shí)現(xiàn)計(jì)算器示例
這篇文章主要為大家介紹了Golang棧結(jié)構(gòu)和后綴表達(dá)式實(shí)現(xiàn)計(jì)算器示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07
從并發(fā)到并行解析Go語言中的sync.WaitGroup
Go?語言提供了許多工具和機(jī)制來實(shí)現(xiàn)并發(fā)編程,其中之一就是?sync.WaitGroup。本文就來深入討論?sync.WaitGroup,探索其工作原理和在實(shí)際應(yīng)用中的使用方法吧2023-05-05
Go語言反射reflect.Value實(shí)現(xiàn)方法的調(diào)用
本文主要介紹了Go語言反射reflect.Value實(shí)現(xiàn)方法的調(diào)用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-05-05

