>  기사  >  백엔드 개발  >  Go 기본 사항: 왜 nil Slices는 새 값을 허용하지만 nil Maps는 허용하지 않는가?

Go 기본 사항: 왜 nil Slices는 새 값을 허용하지만 nil Maps는 허용하지 않는가?

Patricia Arquette
Patricia Arquette원래의
2024-10-01 06:27:29248검색

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]

  • Go는 Pass By Ref를 지원하나요?
  • Go에서 새로 만드는 것과 새로 만드는 것
  • Go는 상속을 지원하나요?
  • Go에서 간단한 웹 서버를 만드는 방법은 무엇입니까?

코드 예제와 함께 이러한 주제에 대해 자세히 알아보려면 내 Github 저장소를 확인하세요.

Go Basics: Why nil Slices accept new values, but nil Maps don 사이7xp / 학습 골랑

GoLang 기초부터 고급까지. 디자인 패턴, SOLID 원칙 등 포함

위 내용은 Go 기본 사항: 왜 nil Slices는 새 값을 허용하지만 nil Maps는 허용하지 않는가?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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