亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

是否可以將先前聲明的函數綁定到結構?

是否可以將先前聲明的函數綁定到結構?

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 關注
  • 174 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號