为了明确起见,我们可以使用括号来重写[][]uint8
as []([]uint8)
:一片(类型的切片uint8
).
使用make http://golang.org/doc/go_spec.html#Making_slices_maps_and_channels内置函数,用于类型切片T
, make(T, n)
返回类型的切片T
与长度n
和容量n
.
所以,make([][]uint8, 2)
相当于make([]([]uint8), 2)
,它返回一个切片,长度和容量为2
,类型切片uint8
,其中每个切片类型uint8
被初始化为零值(anil
长度和容量为零的参考)。
多维切片是锯齿状的,类似于多维锯齿状数组 http://en.wikipedia.org/wiki/Jagged_array.
例如,
package main
import "fmt"
func main() {
ss := make([][]uint8, 2) // ss is []([]uint8)
fmt.Printf("ss: %T %v %d\n", ss, ss, len(ss))
for i, s := range ss { // s is []uint8
fmt.Printf("ss[%d]: %T %v %d\n", i, s, s, len(s))
}
}
Output:
ss: [][]uint8 [[] []] 2
ss[0]: []uint8 [] 0
ss[1]: []uint8 [] 0