이, 당신이 한 것은 "올바른"방법입니다; 슬라이스는 항상 1 차원이지만 더 높은 차원의 객체를 구성하기 위해 구성 될 수 있기 때문입니다. 자세한 내용은이 질문을 참조하십시오 : Go: How is two dimensional array's memory representation. 예를 들어,
a := make([][]uint8, dy)
for i := range a {
a[i] = make([]uint8, dx)
}
은 또한 당신이 composite literal으로 슬라이스를 초기화하는 경우, 당신은 "무료"이를 얻을 수 있습니다 : 당신이 그것에 단순화 할 수
한 것은 for range
구조를 사용하는 것입니다
a := [][]uint8{
{0, 1, 2, 3},
{4, 5, 6, 7},
}
fmt.Println(a) // Output is [[0 1 2 3] [4 5 6 7]]
예, 이것은 당신이 모든 요소를 열거 할 필요가 같은 겉보기에 한계가; 그러나 모든 트릭이 있습니다. 즉, 모든 값을 열거 할 필요는 없으며 슬라이스의 요소 유형이 zero values이 아닌 것들만 열거 할 수 있습니다. 자세한 내용은 Keyed items in golang array initialization을 참조하십시오.
첫 번째 10 개 요소가 제로가 조각을 원하고
1
및
2
다음 예를 들어
, 다음과 같이 만들 수 있습니다
b := []uint{10: 1, 2}
fmt.Println(b) // Prints [0 0 0 0 0 0 0 0 0 0 1 2]
이 또한주의 대신 arrays를 사용하려는 경우 그 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]]
배열의 경우
당신은 배열을 설명하지만 값이없는 한, "외부"배열을 반복하고 "내부"배열을 초기화 할 필요가 없습니다. 자세한 내용은 블로그 게시물 Arrays, slices (and strings): The mechanics of 'append'을 참조하십시오.
는 Go Playground의 예를보십시오. 나는 2 차원 배열의 행을 교환하기 위해이 기능을 작성했습니다
는'range' 게다가, 난은 영업 이익이 무엇을 요구의 차이와 예제 코드를보고 실패합니다. – eduncan911