When passing a map to a function in Go, a copy will be created by default, and modifications to the copy will not affect the original map. If you need to modify the original map, you can pass it through a pointer. Empty maps need to be handled with care, because they are technically nil pointers, and passing an empty map to a function that expects a non-empty map will cause an error.
Things to note when Go functions receive map parameters
In Go, when passing map to a function as a parameter, there are Some precautions, if not paid attention to, may lead to unexpected results.
Copy Passing
When passing a map to a function, a copy is created by default. In other words, the map within the function is a copy of the parameter map, and any modifications to the copy will not affect the original map.
Practical case 1:
func modifyMap(m map[string]int) { m["key"] = 100 } func main() { m := make(map[string]int) modifyMap(m) fmt.Println(m) // 输出:{} }
As shown in the example, the modifications made to the map by themodifyMap
function will not affect the original map.
Avoid copy passing
If you need to modify the original map, you can use a pointer to pass it. When passed a pointer, the map within the function points to the memory address of the original map.
Practical case 2:
func modifyMap(m *map[string]int) { (*m)["key"] = 100 } func main() { m := make(map[string]int) modifyMap(&m) fmt.Println(m) // 输出:{key: 100} }
As shown in the example, the modifications made by themodifyMap
function to the map will affect the original map.
Empty map
Be careful when passing an empty map to a function. An empty map is technically a nil pointer, not a valid map. Therefore, if a function expects a non-empty map, an error may occur when passing an empty map.
Practical Case 3:
func printMap(m map[string]int) { for k, v := range m { fmt.Println(k, v) } } func main() { var m map[string]int // 空 map printMap(m) // 运行时错误:panic: runtime error: invalid memory address or nil pointer dereference }
As shown in the example, passing an empty map to the function will cause a runtime error. To solve this problem, you can perform a non-null check on the map, or provide a default value.
Conclusion:
The above is the detailed content of Things to note when Golang functions receive map parameters. For more information, please follow other related articles on the PHP Chinese website!