去:多维数组的范围和len?

Is it possible to use range and len on a multidimensional array?

Either with var a [3]int8 or

package main

func main () {    
        var a [3][5]int8

        for h := range a {
                println(h)
        }
        println(len(a))
}

Both produce 0 1 2 3 ?

Thanks to dystroy's answer, here's an example of writing and reading a 3-dimensional array i was able to adapt (posting here because I had much trouble finding any examples of this, so maybe this will help someone else):

package main
func main() {
    var a [3][5][7]uint8

    //write values to array
    for x, b := range a {
        for y, c := range b {
            for z, _ := range c {
                    a[x][y][z] = uint8(x*100+y*10+z)
                }
        }   
    }

    //read values from array
    for _, h := range a {
        for _, i := range h {
            for _, j := range i {
                print(j, "\t")
            }
            println()
        }
        println()
    }

}

In Go as in most languages, what you call a multidimensional array is an array of arrays. The len operator only gives you the length of the "external" array.

Maybe the var declaration could be clearer for you if you see it as

var a [3]([5]int8)

which also compiles. It's an array of size 3 whose elements are arrays of size 5 of int8.

package main
import "fmt"
func main() {
    var a [3][5]int8
    for _, h := range a {
        fmt.Println(len(h)) // each one prints 5
    }
    fmt.Println(len(a))  // prints 3, the length of the external array
}

outputs

5
5
5
3

To loop safely through the whole matrix, you can do this :

for _, h := range a {
    for _, cell := range h {
        fmt.Print(cell, " ")
    }
    fmt.Println()
}

If you need to change the content, you may do

    for i, cell := range h { // i is the index, cell the value
        h[i] = 2 * cell
    }

No, the first one produces 0,1,2 ( index of in the range )

http://play.golang.org/p/0KrzTRWzKO

And the second one produces 3 ( the length of the array ).

http://play.golang.org/p/0esKFqQZL0

In both cases you're using the outermost array.