Nil Slice에 새 값을 추가할 수 있지만 Nil Map에 새 값을 추가하면 런타임 오류가 발생합니다. 그 이유를 살펴보겠습니다
var slice []int // nil slice slice = append(slice, 1) // append works as expected fmt.Println(slice) // [1] var m map[string]int // nil map m["one"] = 1 // ? Runtime panic: assignment to entry in nil map
Nil Slice에 추가하는 것이 효과적인 이유:
슬라이스는 기본 배열 및 동적으로 크기가 조정되는 데이터 구조에 대한 참조입니다. 3가지 구성요소로 구성되어 있습니다
nil 슬라이스를 선언하면 길이와 용량은 0이 되며 기본 배열을 가리키지 않습니다. 기본적으로 추가 작업은 용량을 확인하고 충분하지 않은 경우 새 요소를 저장할 수 있는 충분한 용량을 가진 새 기본 배열을 할당하고 새로 생성된 배열을 가리키는 새 슬라이스를 반환합니다. 따라서 예상대로 추가가 작동합니다.
Nil 지도에 추가하면 작동하지 않는 이유:
golang의 맵은 기본적으로 해시 테이블 역할을 하며 키-값 쌍을 저장하기 전에 먼저 내부 데이터 구조를 초기화해야 합니다.
맵을 nil(var m map[string]int)로 선언하면 초기화되지 않으며 아직 키-값 쌍을 저장할 준비가 되지 않은 것입니다. 따라서 nil 맵에 값을 추가하려고 하면 런타임 오류가 발생합니다. 이러한 오류를 방지하려면 make
를 사용하여 맵을 생성하세요.
var m map[string]int // nil map m = make(map[string]int) // initialize it m["one"] = 1 // map is now initialized, so we can add values print(m) // map[one:1]
코드 예제와 함께 이러한 주제에 대해 자세히 알아보려면 내 Github 저장소를 확인하세요.
위 내용은 Go 기본 사항: 왜 nil Slices는 새 값을 허용하지만 nil Maps는 허용하지 않는가?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!