> 백엔드 개발 > Golang > Go에서 Nil, Non-nil, 빈 조각의 차이점은 무엇입니까?

Go에서 Nil, Non-nil, 빈 조각의 차이점은 무엇입니까?

Susan Sarandon
풀어 주다: 2024-12-16 03:25:09
원래의
417명이 탐색했습니다.

What's the Difference Between Nil, Non-nil, and Empty Slices in Go?

Go의 nil vs. Non-nil vs. 빈 슬라이스

Go에서 슬라이스는 배열, 길이 및 용량에 대한 포인터로 정의됩니다. 그러나 슬라이스에는 nil 슬라이스, 길이와 용량이 0인 non-nil 슬라이스, 빈 슬라이스 등 다양한 유형이 있습니다.

Nil 슬라이스

Nil 슬라이스에는 가리키고 가리키는 기본 배열이 없습니다. 따라서 길이와 용량은 0입니다. 본질적으로 요소가 없는 것처럼 동작하는 존재하지 않는 슬라이스입니다.

길이와 용량이 0인 Non-nil 슬라이스

이러한 슬라이스는 길이와 용량이 0으로 초기화됩니다. nil 슬라이스와 달리 가리키는 기본 배열이 있지만 비어 있습니다. nil이 아닌 슬라이스는 잠재적으로 크기가 커질 수 있지만 nil 슬라이스는 크기가 커질 수 없기 때문에 이러한 구별이 중요합니다.

빈 슬라이스

빈 슬라이스는 본질적으로 길이와 용량이 0인 non-nil 슬라이스와 동일합니다. . 그러나 "빈 슬라이스"라는 용어는 nil 또는 non-nil 여부에 관계없이 특정 슬라이스에 요소가 없음을 강조하기 위해 자주 사용됩니다.

관찰 가능한 동작

nil 및 non-nil 길이와 용량이 0인 nil 슬라이스는 동일한 내부 구조를 공유하지 않을 수 있으며 거의 ​​동일한 관찰 가능 항목을 나타냅니다. 동작:

  • 길이 및 용량 정보를 얻기 위해 len() 및 cap() 함수에 전달할 수 있습니다.
  • for range 루프를 사용하여 반복할 수 있지만 반복이 없습니다.
  • 슬라이스 표현 제한을 위반하지 않고 슬라이스할 수 있습니다.
  • 그 내용은 길이가 0이기 때문에 수정되었습니다.

Nil이 아닌 빈 슬라이스와 Nil 슬라이스 구별

nil과 non-nil 빈 슬라이스를 구별하는 신뢰할 수 있는 유일한 방법은 슬라이스를 비교하는 것입니다. nil 식별자에 대한 값입니다. 그러나 일부 패키지(예: 인코딩/json 및 fmt)는 슬라이스가 nil인지 여부에 따라 다르게 작동할 수 있습니다.

슬라이스가 비어 있는지 테스트

슬라이스가 비어 있으면 길이를 0과 비교합니다: len(s) == 0. 이는 nil 및 non-nil 비어 모두에 대해 true를 반환합니다.

Nil이 아닌 빈 슬라이스의 포인터 이해

슬라이스의 내부 표현에서 포인터는 기본 배열을 가리킵니다. nil이 아닌 빈 슬라이스의 경우 이 포인터는 nil이 아닐 수 있습니다. 그러나 크기가 0인 기본 배열을 가리킵니다. Go 사양에서는 다양한 유형의 0 크기 값이 동일한 메모리 주소를 가질 수 있도록 허용합니다.

요약하자면, 길이와 용량이 0인 nil 슬라이스와 nil이 아닌 슬라이스는 관찰 가능한 동작 측면에서 유사하게 나타날 수 있습니다. 그들의 기본 구조는 그들을 구별합니다. nil이 아닌 슬라이스에는 할당되었지만 비어 있는 기본 배열이 있고, nil 슬라이스에는 할당된 배열이 없습니다.

위 내용은 Go에서 Nil, Non-nil, 빈 조각의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿