"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Go 기본 사항: 왜 nil Slices는 새 값을 허용하지만 nil Maps는 허용하지 않는가?

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

2024-11-01에 게시됨
검색:570

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 원칙 등 포함

릴리스 선언문 이 기사는 https://dev.to/sai7xp/go-basics-why-nil-slices-accept-new-values-but-nil-maps-dont-23l0?1에서 복제됩니다. 침해가 있는 경우, 문의: Study_golang@163 .comdelete
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3