是否可以将先前声明的函数绑定到多个结构?前任:package mainimport "fmt"// very useful function both A and B should havefunc SayHi() { fmt.Println("hi!")}type A struct {} // A needs SayHi :(type B struct {} // B needs SayHi :(func main() { a := A{} a.SayHi() b := B{} b.SayHi()}主要原因是我不想为SayHi需要它的每种类型重复实现,所以这不能作为答案:type A struct {}func A SayHi() { fmt.Println("hi!")}type B struct {}func B SayHi() { fmt.Println("hi!")}换句话说,如何在结构之间借用|继承|共享|绑定方法?PS:不确定 Go 使用什么术语,但似乎接口不适用于这种情况,因为它需要为每个结构重新实现方法。
1 回答
猛跑小猪
TA贡献1858条经验 获得超8个赞
一种方法是将该方法声明为第三个结构的一部分:
type Foo struct {}
func (f Foo) SayHi() {
fmt.Prinln("hi!")
}
然后可以A通过嵌入来添加此方法:
type A struct {
Foo
}
A将公开 的所有方法Foo,并且由于Foo是一个空结构,因此不会影响其内存布局。请注意,当该SayHi方法被调用时,它不会知道它是在 anA还是Foo变量上调用的,因此这仅适用于自包含方法。
如果方法主体确实需要知道接收者的类型,则需要在 上显式声明该方法A。您可以将主体分解为辅助函数,以便与其他类型共享实现。
- 1 回答
- 0 关注
- 159 浏览
添加回答
举报
0/150
提交
取消