默认情况下,没有 Map 参考 .
package main
import "fmt"
func mapToAnotherFunction(m map[string]int) {
m["hello"] = 3
m["world"] = 4
m["new_word"] = 5
}
// func mapToAnotherFunctionAsRef(m *map[string]int) {
// m["hello"] = 30
// m["world"] = 40
// m["2ndFunction"] = 5
// }
func main() {
m := make(map[string]int)
m["hello"] = 1
m["world"] = 2
// Initial State
for key, val := range m {
fmt.Println(key, "=>", val)
}
fmt.Println("-----------------------")
mapToAnotherFunction(m)
// After Passing to the function as a pointer
for key, val := range m {
fmt.Println(key, "=>", val)
}
// Try Un Commenting This Line
fmt.Println("-----------------------")
// mapToAnotherFunctionAsRef(&m)
// // After Passing to the function as a pointer
// for key, val := range m {
// fmt.Println(key, "=>", val)
// }
// Outputs
// prog.go:12:4: invalid operation: m["hello"] (type *map[string]int does not support indexing)
// prog.go:13:4: invalid operation: m["world"] (type *map[string]int does not support indexing)
// prog.go:14:4: invalid operation: m["2ndFunction"] (type *map[string]int does not support indexing)
}
来自Golang博客 -
Map 类型是引用类型,如指针或切片,因此上面的m值为nil;它没有指向初始化的 Map . 在读取时,nil映射的行为类似于空映射,但尝试写入nil映射将导致运行时出现混乱;不要那样做 . 要初始化 Map ,请使用内置的make函数:
m = make(map[string]int)