是否可以將先前聲明的函數綁定到多個結構?前任: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 關注
- 174 瀏覽
添加回答
舉報
0/150
提交
取消