第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Go 中從派生類型調(diào)用方法

在 Go 中從派生類型調(diào)用方法

Go
慕尼黑的夜晚無繁華 2022-01-10 14:57:14
我有兩個文件,generic_handler.go,基本上看起來像這樣:type Handler struct{    fields map[string]interface{}}func (handler *Handler) addField(key string, value interface{}){ some code }和 stat_handler.go:type StatHandler Handler當我嘗試調(diào)用(從 stat_handler.go 文件中)這樣的方法時,出現(xiàn)錯誤://inside some functionstathandler.addField("some field", "some value")它與type StatHandler has no field or method addField. 即使我addField通過制作它來導(dǎo)出也是一樣的AddField。這兩個文件都位于同一個包中。有什么我想念的嗎?
查看完整描述

3 回答

?
飲歌長嘯

TA貢獻1951條經(jīng)驗 獲得超3個贊

在 Go 中,你通常會通過組合來做到這一點:


type StatHandler struct {

    Handler  // Anonymous member of type Handler

}


// ...Later on

var stathandler StatHandler

stathandler.addField("some field", "some value")


查看完整回答
反對 回復(fù) 2022-01-10
?
嚕嚕噠

TA貢獻1784條經(jīng)驗 獲得超7個贊

請注意,在 Go 中,為了訪問另一個包中的方法,您需要將其導(dǎo)出,這意味著您必須將方法的第一個字母大寫。


type Handler struct{

    fields map[string]interface{}

}


func (handler *Handler) AddField(key string, value interface{}){ some code }

然后,如果您的包被命名為stathandler您可以訪問該AddField方法:


stathandler.AddField("some field", "some value")


查看完整回答
反對 回復(fù) 2022-01-10
?
喵喔喔

TA貢獻1735條經(jīng)驗 獲得超5個贊

聲明的方法屬于特定類型。該type關(guān)鍵字創(chuàng)建了一個新的類型,其確實您在類型規(guī)范使用的類型不是“繼承”的方法。


addField()您聲明的方法屬于Handler,該類型StatHandler沒有任何方法,因為您沒有指定任何方法作為接收者類型。


如果你有一個類型的變量StatHandler并且你想調(diào)用addField()方法,你需要有一個類型的值*Handler。您可以通過使用類型轉(zhuǎn)換來獲得這樣的值,例如:


s := StatHandler{}

(*Handler)(&s).addField("somekey", "someval")

請注意,由于addField()有指針接收器,因此需要一個指針(因此使用&地址運算符),但*StatHandler只能轉(zhuǎn)換為*Handler.


如果您首先有一個*StatHandler指針:


sp := &StatHandler{}

(*Handler)(sp).addField("somekey", "someval")

由于新類型不會“繼承”底層類型的方法,因此您應(yīng)該考慮嵌入來實現(xiàn)您想要的,因為嵌入類型的方法和字段被提升為嵌入器類型:


type StatHandler struct {

    Handler // Embed Handler, so addField() method will be promoted

}


s2 := StatHandler2{}

s2.addField("somekey", "someval")

試試Go Playground上的示例。


規(guī)范中涵蓋了類型具有哪些方法的確切定義:方法集。


查看完整回答
反對 回復(fù) 2022-01-10
  • 3 回答
  • 0 關(guān)注
  • 164 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號