>  기사  >  백엔드 개발  >  Golang 함수가 맵 매개변수를 수신할 때 주의할 사항

Golang 함수가 맵 매개변수를 수신할 때 주의할 사항

WBOY
WBOY원래의
2024-06-04 10:31:14388검색

Go의 함수에 지도를 전달하면 기본적으로 복사본이 생성되며, 복사본을 수정해도 원본 지도에는 영향을 미치지 않습니다. 원본 지도를 수정해야 하는 경우 포인터를 통해 전달할 수 있습니다. 빈 맵은 기술적으로 nil 포인터이기 때문에 주의해서 처리해야 하며, 비어 있지 않은 맵을 기대하는 함수에 빈 맵을 전달하면 오류가 발생합니다.

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

Go 함수가 맵 매개변수를 받을 때 주의사항

Go에서는 지도를 함수에 매개변수로 전달할 때 주의사항이 있는데, 주의하지 않으면 예상치 못한 결과가 나올 수 있습니다.

복사 전달

지도를 함수에 전달할 때 기본적으로 복사본이 생성됩니다. 즉, 함수 내의 맵은 매개변수 맵의 복사본이며 복사본을 수정해도 원본 맵에는 영향을 주지 않습니다.

실용 사례 1:

func modifyMap(m map[string]int) {
    m["key"] = 100
}

func main() {
    m := make(map[string]int)
    modifyMap(m)
    fmt.Println(m) // 输出:{}
}

예제에 표시된 것처럼 modifyMap 함수로 지도를 수정해도 원본 지도에는 영향을 미치지 않습니다. modifyMap 函数对 map 做出的修改不会影响原始 map。

避免副本传递

如果需要修改原始 map,可以使用指针来传递。当传递指针时,函数内的 map 指向原始 map 的内存地址。

实战案例 2:

func modifyMap(m *map[string]int) {
    (*m)["key"] = 100
}

func main() {
    m := make(map[string]int)
    modifyMap(&m)
    fmt.Println(m) // 输出:{key: 100}
}

如示例所示,modifyMap

복사 전달 방지

원본 지도를 수정해야 하는 경우 포인터를 사용하여 전달할 수 있습니다. 포인터가 전달되면 함수 내의 맵은 원래 맵의 메모리 주소를 가리킵니다.

실용 사례 2:

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
}

예제에 표시된 것처럼 modifyMap 함수로 지도를 수정하면 원본 지도에 영향을 미칩니다.

빈 맵

빈 맵을 함수에 전달할 때는 주의하세요. 빈 맵은 기술적으로 유효한 맵이 아니라 nil 포인터입니다. 따라서 함수가 비어 있지 않은 맵을 예상하는 경우 빈 맵을 전달할 때 오류가 발생할 수 있습니다.
  • 실용 사례 3:
  • rrreee
  • 예제에 표시된 것처럼 빈 맵을 함수에 전달하면 런타임 오류가 발생합니다. 이 문제를 해결하려면 지도에서 null이 아닌 확인을 수행하거나 기본값을 제공할 수 있습니다.
🎜결론: 🎜🎜🎜🎜지도를 함수에 전달하면 기본적으로 복사본이 생성됩니다. 🎜🎜원본 지도를 수정하려면 포인터를 사용하여 전달할 수 있습니다. 🎜🎜빈 지도를 조심하세요. 🎜🎜

위 내용은 Golang 함수가 맵 매개변수를 수신할 때 주의할 사항의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.