반응형
슬라이스를 선언하거나 슬라이스를 만드시겠습니까?
Golang에서의 차이 무엇 var s []int
과 s := 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
반응형
'developer tip' 카테고리의 다른 글
프로그래밍 방식으로 레이아웃 제약 만들기 (0) | 2020.09.18 |
---|---|
유틸리티 클래스 생성자 숨기기 : 유틸리티 클래스에는 공용 또는 기본 생성자가 없어야합니다. (0) | 2020.09.18 |
asp.net mvc보기에서 문자열을 html로 표시 (0) | 2020.09.18 |
Spring Resttemplate 예외 처리 (0) | 2020.09.18 |
git 프록시를 기본 구성으로 재설정 (0) | 2020.09.17 |