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 저장소를 확인하세요.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3