在 Go 1 之前有一段时间使用不存在的键索引地图导致应用程序崩溃。这已更改为返回地图值类型的零值。这是一个设计决策,它允许(有限地)使用未初始化的语言结构而无需额外检查,从而简化了代码。例如,你可以for range遍历nil切片和nil映射,你可以检查它们的长度等。结果当然是一样的:遍历切片nil或映射将导致零次迭代,切片和映射的长度nil为 0,但你不这样做需要if事先使用语句来判断该值是否为非nil(以便判断您是否可以对它们进行范围或索引)。当不存在的键的零值有用时,PeterSO 已经展示了一个很好的例子:计数器。另一个著名的例子是将地图用作集合。如果选择值类型为bool,则不必初始化不在集合中的值。索引映射会告诉您值(键)是否在集合中,如果不在,则booltype being的零值false会告诉您它不在集合中。例如:fruits := map[string]bool{}// Add elements to the set:fruits["apple"] = truefruits["banana"] = true// Test if elements are in the map:fmt.Println("Is apple in the set?", fruits["apple"])fmt.Println("Is banana in the set?", fruits["banana"])fmt.Println("Is plum in the set?", fruits["plum"])fmt.Println("Is lemon in the set?", fruits["lemon"])输出(在Go Playground上尝试):Is apple in the set? trueIs banana in the set? trueIs plum in the set? falseIs lemon in the set? false