빈 슬라이스를 초기화하는 올바른 방법
크기가 고정되지 않은 빈 슬라이스를 선언하는 것이 좋습니다.
mySlice1 := make([]int, 0)
또는:
mySlice2 := []int{}
어느 것이 올바른 방법인지 궁금합니다.
두 가지 대안은 의미 적으로 동일하며 동일한 어셈블리 지침을 생성한다고 가정합니다.
불필요한 할당을 피하기 위해 슬라이스를 사용하지 않을 경우 nil
값을 남겨 둘 수 있습니다 .
var myslice []int
에 기록 된대로 Golang.org 블로그 :
nil 슬라이스는 아무것도 가리지 않더라도 기능적으로 길이가 0 인 슬라이스와 같습니다. 길이가 0이며 할당과 함께 추가 할 수 있습니다.
그것들은 동등합니다. 이 코드를 참조하십시오 :
mySlice1 := make([]int, 0)
mySlice2 := []int{}
fmt.Println("mySlice1", cap(mySlice1))
fmt.Println("mySlice2", cap(mySlice2))
산출:
mySlice1 0
mySlice2 0
두 슬라이스 모두 0
용량이있어 두 슬라이스 모두 0
길이를 가질 수 있습니다 (용량보다 클 수 없음). 두 슬라이스 모두 요소가 없음을 의미합니다. 이것은 2 개의 슬라이스가 모든 측면에서 동일하다는 것을 의미합니다.
비슷한 질문을보십시오 :
골랑에 닐 슬라이스와 빈 슬라이스가있는 점은 무엇입니까?
Go 언어의 nil 조각과 non-nil 조각과 빈 조각
@ 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
빈 슬라이스와 nil 슬라이스는 Go에서 다르게 초기화됩니다.
var nilSlice []int
emptySlice1 := make([]int, 0)
emptySlice2 := []int{}
fmt.Println(nilSlice == nil) // true
fmt.Println(emptySlice1 == nil) // false
fmt.Println(emptySlice2 == nil) // false
세 조각 모두 len과 cap은 0입니다.
참고 URL : https://stackoverflow.com/questions/29164375/correct-way-to-initialize-empty-slice
'Programing' 카테고리의 다른 글
데이터베이스에서 연결 문자열을 얻는 방법 (0) | 2020.05.21 |
---|---|
약한 유형의 언어와 관련하여 명백한 모순에 대해 설명하기 (0) | 2020.05.21 |
URL 안에있는 routerLink에 매개 변수를 전달하는 방법은 무엇입니까? (0) | 2020.05.21 |
매개 변수 선언에서 varchar (MAX)에 어떤 크기를 사용합니까? (0) | 2020.05.21 |
EXISTS를 비트로 직접 선택할 수 있습니까? (0) | 2020.05.21 |