Go의 함수에 지도를 전달하면 기본적으로 복사본이 생성되며, 복사본을 수정해도 원본 지도에는 영향을 미치지 않습니다. 원본 지도를 수정해야 하는 경우 포인터를 통해 전달할 수 있습니다. 빈 맵은 기술적으로 nil 포인터이기 때문에 주의해서 처리해야 하며, 비어 있지 않은 맵을 기대하는 함수에 빈 맵을 전달하면 오류가 발생합니다.
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 포인터입니다. 따라서 함수가 비어 있지 않은 맵을 예상하는 경우 빈 맵을 전달할 때 오류가 발생할 수 있습니다.위 내용은 Golang 함수가 맵 매개변수를 수신할 때 주의할 사항의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!