有谁能帮助我澄清在哪种情况下使用函数作为结构字段更好,以及何时作为结构的方法?
发布于 2021-02-16 12:44:56
函数类型的字段是而不是方法,因此它不是结构类型的方法集的一部分。以struct类型作为接收方声明的"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()
}哪个输出(在围棋游乐场上尝试):
initial
changed函数类型的字段通常用于存储回调函数。标准库中的示例是http.Server和http.Transport。
https://stackoverflow.com/questions/66224523
复制相似问题