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

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

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

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
  • 1 回答
  • 0 关注
  • 159 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信