我是 Go 新手,開始學(xué)習(xí)多態(tài)性。我知道當(dāng)多個對象需要使用相同的函數(shù)時該怎么做。但我有一個新問題,我不知道在不同對象上有相同變量的情況下該怎么辦。在下面的示例中,我有兩個不同的對象:struct1和struct2。它們都有相同的變量name。我可以運行它們并檢查哪個是哪個并相應(yīng)地工作(您可以在這里測試它):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 個物體呢?我需要做20次檢查嗎?所以我想知道是否可以做一個帶有變量的接口,例如:type genericStruct interfcae { name string}...for key, _ := range structMap { generic := structMap[key].(genericStruct) fmt.Println(generic.name)}當(dāng)然,這段代碼不起作用,因為我不知道該怎么做,但我想知道一種方法。
1 回答

嚕嚕噠
TA貢獻1784條經(jīng)驗 獲得超7個贊
對于這個人為的示例,您可以使用 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
}
對于更復(fù)雜的結(jié)構(gòu),這可能會變得混亂,在這種情況下,您可能需要考慮組合建議(通常通過embedding實現(xiàn))或第三方庫,例如genny
- 1 回答
- 0 關(guān)注
- 118 瀏覽
添加回答
舉報
0/150
提交
取消