Чтобы быть в явном виде, мы можем использовать скобки для перезаписи [][]uint8
как []([]uint8)
: фрагмент (фрагменты типа uint8
).
Использование встроенного make в функции для среза типа T
, make(T, n)
возвращает срез типа T
с длиной n
и емкостью n
.
Следовательно, make([][]uint8, 2)
эквивалентно make([]([]uint8), 2)
, он возвращает срез с длиной и емкостью 2
срезов типа uint8
, где каждый срез типа uint8
инициализируется нулевым значением (ссылка nil
с длиной и емкостьюноль).
Многомерные срезы зазубрены и аналогичны многомерным зазубренным массивам .
Например,
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))
}
}
Вывод:
ss: [][]uint8 [[] []] 2
ss[0]: []uint8 [] 0
ss[1]: []uint8 [] 0