我是 Go 新手,开始学习多态性。我知道当多个对象需要使用相同的函数时该怎么做。但我有一个新问题,我不知道在不同对象上有相同变量的情况下该怎么办。在下面的示例中,我有两个不同的对象:struct1和struct2。它们都有相同的变量name。我可以运行它们并检查哪个是哪个并相应地工作(您可以在这里测试它):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)}当然,这段代码不起作用,因为我不知道该怎么做,但我想知道一种方法。
1 回答
噜噜哒
TA贡献1784条经验 获得超7个赞
对于这个人为的示例,您可以使用 getters / setters 而不是静态属性来利用接口:
type GenericStruct interface {
GetName() string
}
现在,任何具有调用的接收器的结构都GetName将满足该GenericStruct接口:
type MyStruct struct {
Name string
}
func (ms *MyStruct) GetName() string {
return ms.Name
}
对于更复杂的结构,这可能会变得混乱,在这种情况下,您可能需要考虑组合建议(通常通过embedding实现)或第三方库,例如genny
- 1 回答
- 0 关注
- 88 浏览
添加回答
举报
0/150
提交
取消