Technically what we’re making here is a slice with a defined length. It’s not possible to make an array in Go with a non constant number.
Initializing a multidimensional array in Go is tricky, you can create a simple fixed size array with one line of code but if you need a multidimensional array you need to define each element separately.
2D Array with a size of NxM
package main
import (
"fmt"
)
func main() {
var N, M = 3, 4
array := make([][]int, N)
for n := 0; n < N; n++ {
array[n] = make([]int, M)
}
fmt.Printf("%#v", array)
// Output:
// [][]int{[]int{0, 0, 0, 0}, []int{0, 0, 0, 0}, []int{0, 0, 0, 0}}
}
3D Array with a size of NxMxK
package main
import (
"fmt"
)
func main() {
var N, M, K = 2, 3, 4
array := make([][][]int, N)
for n := 0; n < N; n++ {
array[n] = make([][]int, M)
for m := 0; m < M; m++ {
array[n][m] = make([]int, K)
}
}
fmt.Printf("%#v", array)
// Output:
// [][][]int{[][]int{[]int{0, 0, 0, 0}, []int{0, 0, 0, 0}, []int{0, 0, 0, 0}}, [][]int{[]int{0, 0, 0, 0}, []int{0, 0, 0, 0}, []int{0, 0, 0, 0}}}
}