developer tip

슬라이스를 선언하거나 슬라이스를 만드시겠습니까?

copycodes 2020. 9. 18. 08:19
반응형

슬라이스를 선언하거나 슬라이스를 만드시겠습니까?


Golang에서의 차이 무엇 var s []ints := make([]int, 0)?

두 가지 모두 효과가 있지만 어느 것이 더 낫습니까?


fabriziom답변 외에도 " Go Slices : usage and internals " 에서 더 많은 예제를 볼 수 있습니다 []int.

슬라이스 ( nil) 의 0 값은 길이0 인 슬라이스 처럼 작동 하므로 슬라이스 변수를 선언 한 다음 루프에서 추가 할 수 있습니다.

// Filter returns a new slice holding only
// the elements of s that satisfy f()
func Filter(s []int, fn func(int) bool) []int {
    var p []int // == nil
    for _, v := range s {
        if fn(v) {
            p = append(p, v)
        }
    }
    return p
}

즉, 슬라이스에 추가하려면 먼저 메모리를 할당 할 필요가 없습니다. nil슬라이스 p int[]는 추가 할 슬라이스로 충분합니다.


간단한 선언

var s []int

메모리 할당하지 않습니다 s에 포인트를 nil하면서,

s := make([]int, 0)

메모리를 할당하고 s요소가 0 인 슬라이스에 메모리를 가리 킵니다.

일반적으로 첫 번째는 사용 사례의 정확한 크기를 모르는 경우 더 관용적입니다.


좀 더 완전하게 (에서 하나 이상의 인수 make) 예제 :

slice := make([]int, 2, 5)
fmt.Printf("lenght:  %d - capacity %d - content:  %d", len(slice), cap(slice), slice)

밖:

lenght:  2 - capacity 5 - content:  [0 0]

또는 동적 유형 slice:

slice := make([]interface{}, 2, 5)
fmt.Printf("lenght:  %d - capacity %d - content:  %d", len(slice), cap(slice), slice)

밖:

lenght:  2 - capacity 5 - content:  [<nil> <nil>]

방금 차이를 찾았습니다. 사용하는 경우

var list []MyObjects

출력을 JSON으로 인코딩하면 null.

list := make([]MyObjects, 0)

결과 []예상대로.

참고 URL : https://stackoverflow.com/questions/25543520/declare-slice-or-make-slice

반응형