go 语言中,结构体中未初始化的函数类型字段(如 `func(int) int`)的零值是 `nil`,调用该值会导致 panic;使用前必须显式赋值。
在 Go 中,所有类型都有明确的零值(zero value),函数类型也不例外。根据 Go 语言规范,函数类型的零值是 nil。这意味着,当你声明一个包含函数字段的结构体并仅做零值初始化时,该函数字段自动被设为 nil,而非可调用的函数。
例如:
type foo struct {
bar func(int) int
}
func main() {
var x foo
fmt.Printf("%v\n", x.bar) // 输出:
// ❌ 危险!以下代码会 panic:call of nil function
// result := x.bar(42)
}
⚠️ 重要注意事项: