任何人都可以幫我澄清在哪些情況下最好使用函數作為結構字段,何時作為結構的方法?
1 回答

蕪湖不蕪
TA貢獻1796條經驗 獲得超7個贊
函數類型的字段不是方法,因此它不是結構類型的方法集的一部分。以結構類型作為接收器聲明的“true”方法將成為方法集的一部分。
話雖如此,如果你想實現一個接口,你別無選擇,只能定義“true”方法。
方法“附加”到具體類型,無法在運行時更改。函數類型的字段可用于“模仿”虛擬方法,但如上所述,這不是方法??梢栽谶\行時重新分配函數類型的字段。
如以下示例所示:
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
函數類型的字段通常用于存儲回調函數。來自標準 lib 的示例是 http。服務器和 http.運輸。
- 1 回答
- 0 關注
- 110 瀏覽
添加回答
舉報
0/150
提交
取消