빈 슬라이스를 초기화하는 올바른 방법
크기가 고정되지 않은 빈 슬라이스를 선언하려면 다음 작업을 수행하는 것이 좋습니다.
mySlice1 := make([]int, 0)
또는:
mySlice2 := []int{}
어떤 것이 올바른 방법인지 궁금할 뿐입니다.
당신이 제시한 두 가지 대안은 의미론적으로 동일하지만 사용합니다.make([]int, 0)
런타임에 대한 내부 호출이 발생합니다.make slice (고 1.16).
또한 다음과 같은 옵션을 사용할 수 있습니다.nil
값:
var myslice []int
0 슬라이스는 0을 가리키지 않더라도 기능적으로 0 길이 슬라이스와 동일합니다.길이가 0이며 할당과 함께 추가할 수 있습니다.
A nil
하지만 슬라이스는 할 것입니다.json.Marshal()
안으로"null"
반면에 빈 조각은 다음과 같습니다."[]"
@farwayer가 지적했듯이.
@Arman Ordukhani가 지적한 바와 같이 위의 옵션 중 어떤 것도 할당을 유발하지 않습니다.
그들은 동등합니다.다음 코드 참조:
mySlice1 := make([]int, 0)
mySlice2 := []int{}
fmt.Println("mySlice1", cap(mySlice1))
fmt.Println("mySlice2", cap(mySlice2))
출력:
mySlice1 0
mySlice2 0
두 조각 모두 다음과 같습니다.0
두 슬라이스가 모두 가지고 있음을 의미하는 용량0
길이(용량보다 클 수 있음). 즉, 두 조각 모두 요소가 없음을 나타냅니다.이것은 두 조각이 모든 측면에서 동일하다는 것을 의미합니다.
유사한 질문을 참조하십시오.
골랑에 제로 슬라이스와 빈 슬라이스가 있는 이유는 무엇입니까?
바둑 언어에서 영 슬라이스 vs 비-닐 슬라이스 vs 빈 슬라이스
@ANISUS의 답변에 추가로...
아래는 "행동에 나서라" 책의 몇 가지 정보이며, 제가 언급할 가치가 있다고 생각합니다.
사이의 차이nil
&empty
얇게 썬 조각들
이와 같은 슬라이스를 생각하면 다음과 같습니다.
[pointer] [length] [capacity]
그러면:
nil slice: [nil][0][0]
empty slice: [addr][0][0] // points to an address
영 슬라이스
조각을 반환하는 함수에서 예외가 발생하는 경우와 같이 존재하지 않는 조각을 나타낼 때 유용합니다.
// Create a nil slice of integers. var slice []int
빈 조각
빈 슬라이스는 데이터베이스 쿼리가 0 결과를 반환하는 경우와 같이 빈 컬렉션을 나타낼 때 유용합니다.
// Use make to create an empty slice of integers. slice := make([]int, 0) // Use a slice literal to create an empty slice of integers. slice := []int{}
제로 슬라이스를 사용하든 빈 슬라이스를 사용하든 상관없이 기본 제공 기능
append
,len
,그리고.cap
똑같이 일하다
이동 놀이터 예:
package main
import (
"fmt"
)
func main() {
var nil_slice []int
var empty_slice = []int{}
fmt.Println(nil_slice == nil, len(nil_slice), cap(nil_slice))
fmt.Println(empty_slice == nil, len(empty_slice), cap(empty_slice))
}
인쇄:
true 0 0
false 0 0
Go: 빈 슬라이스와 nil 슬라이스는 다르게 초기화됩니다.
var nilSlice []int
emptySlice1 := make([]int, 0)
emptySlice2 := []int{}
fmt.Println(nilSlice == nil) // true
fmt.Println(emptySlice1 == nil) // false
fmt.Println(emptySlice2 == nil) // false
세 조각 모두에서 렌과 캡은 0입니다.
@ANISUS의 답변 외에도
공식 Go MongoDb Driver 사용 시 anil
슬라이스도 에 병합됩니다."null"
반면에 빈 조각은 다음과 같습니다."[]"
.
커뮤니티 지원 MGO 드라이버를 사용하는 경우 두 가지 모두nil
그리고 빈 조각들은 마셜로 모아질 것입니다."[]"
.
참조: https://jira.mongodb.org/browse/GODRIVER-971
언급URL : https://stackoverflow.com/questions/29164375/correct-way-to-initialize-empty-slice
'programing' 카테고리의 다른 글
셸(BASH/ZSH/SH)을 통해 파일의 절대 경로를 얻는 방법은 무엇입니까? (0) | 2023.05.08 |
---|---|
VB에서 암시적 변환 연산자를 정의하는 방법이 있습니까?NET? (0) | 2023.05.08 |
AttributeError: 부분적으로 초기화된 모듈을 수정하는 방법? (0) | 2023.05.08 |
C# 유닛 테스트 시 "내부" 액세스 한정자 (0) | 2023.05.08 |
현재 메서드의 이름을 가져옵니다. (0) | 2023.05.08 |