任何人都可以帮我澄清在哪些情况下最好使用函数作为结构字段,何时作为结构的方法?
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 关注
- 126 浏览
添加回答
举报
0/150
提交
取消