为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用变量的多态性

如何使用变量的多态性

Go
潇潇雨雨 2023-07-26 15:43:11
我是 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


查看完整回答
反对 回复 2023-07-26
  • 1 回答
  • 0 关注
  • 88 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信