两种不同的类型如何使用接口在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 个回答
-
不,您不能, 但是 您可以创建一个基本类型,然后将其嵌入到您的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", }, }