Ваш диапазон l oop отлично подходит . Единственная проблема в том, что если вы используете два цикла для 2D-массива, то зачем вам использовать grid [0] во внешнем l oop, просто используйте сетку это будет работать
Ваш обновленный рабочий код
package main
import (
"fmt"
)
func main() {
grid := [][]int{
{0, 1, 2, 3},
{4, 5, 6, 7},
}
for _, array := range grid {
for j := range array {
fmt.Print(array[j], " ")
}
fmt.Println()
}
}
Пример выполнения - https://play.golang.org/p/NIkhFOqyF6g
Это выдает ошибку, потому что когда вы передаете grid [0] внешнему l oop, он передаст целочисленное значение во внутреннем l oop, и это даст ошибку не может перемещаться по массиву (тип int)