Go에서 슬라이스는 배열, 길이 및 용량에 대한 포인터로 정의됩니다. 그러나 슬라이스에는 nil 슬라이스, 길이와 용량이 0인 non-nil 슬라이스, 빈 슬라이스 등 다양한 유형이 있습니다.
Nil 슬라이스에는 가리키고 가리키는 기본 배열이 없습니다. 따라서 길이와 용량은 0입니다. 본질적으로 요소가 없는 것처럼 동작하는 존재하지 않는 슬라이스입니다.
이러한 슬라이스는 길이와 용량이 0으로 초기화됩니다. nil 슬라이스와 달리 가리키는 기본 배열이 있지만 비어 있습니다. nil이 아닌 슬라이스는 잠재적으로 크기가 커질 수 있지만 nil 슬라이스는 크기가 커질 수 없기 때문에 이러한 구별이 중요합니다.
빈 슬라이스는 본질적으로 길이와 용량이 0인 non-nil 슬라이스와 동일합니다. . 그러나 "빈 슬라이스"라는 용어는 nil 또는 non-nil 여부에 관계없이 특정 슬라이스에 요소가 없음을 강조하기 위해 자주 사용됩니다.
nil 및 non-nil 길이와 용량이 0인 nil 슬라이스는 동일한 내부 구조를 공유하지 않을 수 있으며 거의 동일한 관찰 가능 항목을 나타냅니다. 동작:
nil과 non-nil 빈 슬라이스를 구별하는 신뢰할 수 있는 유일한 방법은 슬라이스를 비교하는 것입니다. nil 식별자에 대한 값입니다. 그러나 일부 패키지(예: 인코딩/json 및 fmt)는 슬라이스가 nil인지 여부에 따라 다르게 작동할 수 있습니다.
슬라이스가 비어 있으면 길이를 0과 비교합니다: len(s) == 0. 이는 nil 및 non-nil 비어 모두에 대해 true를 반환합니다.
슬라이스의 내부 표현에서 포인터는 기본 배열을 가리킵니다. nil이 아닌 빈 슬라이스의 경우 이 포인터는 nil이 아닐 수 있습니다. 그러나 크기가 0인 기본 배열을 가리킵니다. Go 사양에서는 다양한 유형의 0 크기 값이 동일한 메모리 주소를 가질 수 있도록 허용합니다.
요약하자면, 길이와 용량이 0인 nil 슬라이스와 nil이 아닌 슬라이스는 관찰 가능한 동작 측면에서 유사하게 나타날 수 있습니다. 그들의 기본 구조는 그들을 구별합니다. nil이 아닌 슬라이스에는 할당되었지만 비어 있는 기본 배열이 있고, nil 슬라이스에는 할당된 배열이 없습니다.
위 내용은 Go에서 Nil, Non-nil, 빈 조각의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!