더 간결한 방법은 없습니다. "올바른"방법을 사용했습니다. 슬라이스는 항상 1 차원이지만 더 높은 차원의 객체를 구성하도록 구성 될 수 있기 때문입니다. 자세한 내용은 다음 질문을 참조하십시오. Go : 2 차원 배열의 메모리 표현 방법 .
단순화 할 수있는 한 가지는 다음과 같은 for range
구성 을 사용하는 것입니다 .
a := make([][]uint8, dy)
for i := range a {
a[i] = make([]uint8, dx)
}
또한 컴포지트 리터럴로 슬라이스를 초기화 하면 "무료"를 얻을 수 있습니다. 예를 들면 다음과 같습니다.
a := [][]uint8{
{0, 1, 2, 3},
{4, 5, 6, 7},
}
fmt.Println(a) // Output is [[0 1 2 3] [4 5 6 7]]
예, 모든 요소를 열거해야하므로 한계가 있습니다. 그러나 몇 가지 트릭이 있습니다. 즉, 모든 값을 열거 할 필요가없고 슬라이스 요소 유형의 0 값 이 아닌 값만 열거 할 필요가 있습니다 . 이에 대한 자세한 내용은 golang 배열 초기화의 키 항목을 참조하세요 .
예를 들어, 당신은 처음 10 개 요소가 제로가 다음 다음 조각하려는 경우 1
와 2
이 같이 생성 할 수 있습니다 :
b := []uint{10: 1, 2}
fmt.Println(b) // Prints [0 0 0 0 0 0 0 0 0 0 1 2]
또한 slices 대신 배열 을 사용하면 매우 쉽게 만들 수 있습니다.
c := [5][5]uint8{}
fmt.Println(c)
출력은 다음과 같습니다.
[[0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0]]
배열의 경우 "외부"배열을 반복하고 "내부"배열을 초기화 할 필요가 없습니다. 배열은 설명자가 아니라 값이기 때문입니다. 자세한 내용은 블로그 게시물 배열, 슬라이스 (및 문자열) : '추가'메커니즘 을 참조하십시오.
Go Playground 에서 예제를 시도해보십시오 .
cannot use [5][2]string literal (type [5][2]string) as type [][]string in field value
Go가 슬라이스라고 말하는 것에 배열을 할당하려고 할 때 얻습니다 .