为了账号安全,请及时绑定邮箱和手机立即绑定

是否可以将先前声明的函数绑定到结构?

是否可以将先前声明的函数绑定到结构?

Go
冉冉说 2021-09-10 10:56:16
是否可以将先前声明的函数绑定到多个结构?前任: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。您可以将主体分解为辅助函数,以便与其他类型共享实现。


查看完整回答
反对 回复 2021-09-10

添加回答

代码语言

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号