一尘不染

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

go

说我有两个结构:

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

谢谢!


阅读 181

收藏
2020-07-02

共1个答案

一尘不染

不,您不能, 但是 您可以创建一个基本类型,然后将其嵌入到您的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",
    },
}

操场上的完整例子

嵌入文件

2020-07-02