Programing

빈 슬라이스를 초기화하는 올바른 방법

crosscheck 2020. 5. 21. 20:33
반응형

빈 슬라이스를 초기화하는 올바른 방법


크기가 고정되지 않은 빈 슬라이스를 선언하는 것이 좋습니다.

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

반응형