在 Go 语言里,局部变量和全局变量如果没有显式初始化,它们的默认值分别是什么?请说明各自的零值机制。
考察说明
考察对 Go 语言变量默认值(零值)机制的理解,区分局部变量和全局变量在缺省值上的相同点与细节。
回答思路
- 【回答框架 1】Go 语言中,无论是局部变量还是全局变量,声明时若未显式赋值,都会被自动赋予对应类型的零值。这是 Go 的零值机制,由编译器保证。
- 【回答框架 2】局部变量与全局变量在缺省值上本质相同,都遵循零值规则。例如,int 类型零值为 0,string 类型零值为空字符串,bool 类型零值为 false。
- 【回答框架 3】引用类型如指针、map、slice、channel 和函数变量,零值为 nil。但需注意,结构体变量的零值是其字段的零值组合,而数组的零值则是元素类型的零值序列。
- 【回答框架 4】最关键的差异在于使用场景:未初始化的局部变量在声明后即可安全使用,因为其值一定是零值;而全局变量同样适用,但常显式初始化以避免混淆。另外,Go 中局部变量声明后未使用会编译错误,但全局变量无此限制。
- 【关键点 1】Go 语言所有变量声明后若无显式初始化,自动获得对应类型的零值。
- 【关键点 2】局部变量和全局变量的缺省值规则相同,均为零值。
- 【关键点 3】常见零值:数值类型为 0,字符串为空串,布尔为 false,指针/切片/map/函数等为 nil。
- 【关键点 4】局部变量若声明后未使用会导致编译失败,全局变量无此限制。