我是 Go 新手,開始學(xué)習(xí)多態(tài)性。我知道當(dāng)多個(gè)對(duì)象需要使用相同的函數(shù)時(shí)該怎么做。但我有一個(gè)新問題,我不知道在不同對(duì)象上有相同變量的情況下該怎么辦。在下面的示例中,我有兩個(gè)不同的對(duì)象:struct1和struct2。它們都有相同的變量name。我可以運(yùn)行它們并檢查哪個(gè)是哪個(gè)并相應(yīng)地工作(您可以在這里測(cè)試它):package mainimport ( "fmt")type struct1 struct { name string}type struct2 struct { name string}func main(){ structMap := make(map[string]interface{}) s1 := struct1{name:"struct1_name"} s2 := struct2{name:"struct2_name"} structMap["struct1"] = s1 structMap["struct2"] = s2 for key, _ := range structMap { switch key { case "struct1": generic := structMap[key].(struct1) fmt.Println(generic.name) case "struct2": generic := structMap[key].(struct2) fmt.Println(generic.name) } }}但如果我有 20 個(gè)物體呢?我需要做20次檢查嗎?所以我想知道是否可以做一個(gè)帶有變量的接口,例如:type genericStruct interfcae { name string}...for key, _ := range structMap { generic := structMap[key].(genericStruct) fmt.Println(generic.name)}當(dāng)然,這段代碼不起作用,因?yàn)槲也恢涝撛趺醋觯蚁胫酪环N方法。
1 回答

嚕嚕噠
TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超7個(gè)贊
對(duì)于這個(gè)人為的示例,您可以使用 getters / setters 而不是靜態(tài)屬性來利用接口:
type GenericStruct interface {
? ?GetName() string
}
現(xiàn)在,任何具有調(diào)用的接收器的結(jié)構(gòu)都GetName將滿足該GenericStruct接口:
type MyStruct struct {
? Name string
}
func (ms *MyStruct) GetName() string {
? return ms.Name
}
對(duì)于更復(fù)雜的結(jié)構(gòu),這可能會(huì)變得混亂,在這種情況下,您可能需要考慮組合建議(通常通過embedding實(shí)現(xiàn))或第三方庫,例如genny
- 1 回答
- 0 關(guān)注
- 109 瀏覽
添加回答
舉報(bào)
0/150
提交
取消