说我有两个结构:
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) }
谢谢!
不,您不能, 但是 您可以创建一个基本类型,然后将其嵌入到您的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", }, }
操场上的完整例子
嵌入文件