1 回答

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超7個(gè)贊
函數(shù)類(lèi)型的字段不是方法,因此它不是結(jié)構(gòu)類(lèi)型的方法集的一部分。以結(jié)構(gòu)類(lèi)型作為接收器聲明的“true”方法將成為方法集的一部分。
話雖如此,如果你想實(shí)現(xiàn)一個(gè)接口,你別無(wú)選擇,只能定義“true”方法。
方法“附加”到具體類(lèi)型,無(wú)法在運(yùn)行時(shí)更改。函數(shù)類(lèi)型的字段可用于“模仿”虛擬方法,但如上所述,這不是方法??梢栽谶\(yùn)行時(shí)重新分配函數(shù)類(lèi)型的字段。
如以下示例所示:
type Foo struct {
Bar func()
}
func main() {
f := Foo{
Bar: func() { fmt.Println("initial") },
}
f.Bar()
f.Bar = func() { fmt.Println("changed") }
f.Bar()
}
哪些輸出(在Go Playground上嘗試):
initial
changed
函數(shù)類(lèi)型的字段通常用于存儲(chǔ)回調(diào)函數(shù)。來(lái)自標(biāo)準(zhǔn) lib 的示例是 http。服務(wù)器和 http.運(yùn)輸。
- 1 回答
- 0 關(guān)注
- 119 瀏覽
添加回答
舉報(bào)