Things to note when Golang functions receive map parameters

WBOY
Release: 2024-06-04 10:31:14
Original
383 people have browsed it

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.

Golang 函数接收 map 参数时的注意事项

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) // 输出:{}
}
Copy after login

As shown in the example, the modifications made to the map by the modifyMap 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}
}
Copy after login

As shown in the example, the modifications made by the modifyMap 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
}
Copy after login

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:

  • When you pass a map to a function, a copy is created by default.
  • To modify the original map, you can use a pointer to pass it.
  • Be careful with empty maps.

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!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!