如何使用变量的多态性

我是 Go 新手,开始学习多态性。
我知道当多个对象需要使用相同的函数时该怎么做。
但我有一个新问题,我不知道在不同对象上有相同变量的情况下该怎么办。

在下面的示例中,我有两个不同的对象:struct1struct2。它们都有相同的变量name
我可以运行它们并检查哪个是哪个并相应地工作(您可以在这里测试它):

package main


import (

    "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)


}

当然,这段代码不起作用,因为我不知道该怎么做,但我想知道一种方法。


潇潇雨雨
浏览 89回答 1
1回答

噜噜哒

对于这个人为的示例,您可以使用 getters / setters 而不是静态属性来利用接口:type GenericStruct interface {   GetName() string}现在,任何具有调用的接收器的结构都GetName将满足该GenericStruct接口:type MyStruct struct {  Name string}func (ms *MyStruct) GetName() string {  return ms.Name}对于更复杂的结构,这可能会变得混乱,在这种情况下,您可能需要考虑组合建议(通常通过embedding实现)或第三方库,例如genny
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go