Go

两种不同的类型如何使用接口在golang中实现相同的方法?

发布于 2021-02-01 11:11:53

说我有两个结构:

type First struct {
    str string
}
type Second struct {
    str string
}

我希望他们都实现接口A:

type A interface {
    PrintStr() //print First.str or Second.str
}

像这样对First和Second结构都实现似乎是多余的:

func (f First) PrintStr() {
    fmt.Print(f.str)
}

func (s Second) PrintStr() {
    fmt.Print(s.str)
}

有没有一种方法可以为实现接口A的所有结构提供一个实现?像这样的东西,但似乎不起作用:

func (a A) PrintStr() {
    fmt.Print(a.str)
}

谢谢!

关注者
0
被浏览
81
1 个回答
  • 面试哥
    面试哥 2021-02-01
    为面试而生,有面试问题,就找面试哥。

    不,您不能, 但是 您可以创建一个基本类型,然后将其嵌入到您的2结构中,因此只需要一个基本类型的实现即可:

    type WithString struct {
        str string
    }
    
    type First struct {
        WithString
    }
    
    type Second struct {
        WithString
    }
    
    type A interface {
        PrintStr() //print First.str or Second.str
    }
    
    func (w WithString) PrintStr() {
        fmt.Print(w.str)
    }
    

    用法:

    a := First{
        WithString: WithString{
            str: "foo",
        },
    }
    

    操场上的完整例子

    嵌入文件



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看