package main
import "fmt"
func main() {
mat := [][]int{{}}
fmt.Println(len(mat), ", ", cap(mat)) //1, 1
fmt.Println(len(mat[0]), ", ", cap(mat[0])) //0, 0
fmt.Println(mat) //[[]]
mat = append(mat, []int{1, 2})
fmt.Println(len(mat), ", ", cap(mat)) //2, 2
fmt.Println(len(mat[0]), ", ", cap(mat[0])) //0, 0
fmt.Println(mat) //[[], [1, 2]]
}
上述方法创建的二维切片,会在多出一个容量为0的一维切片;
不推荐使用该方法;
//直接初始化
package main
import "fmt"
func main() {
mat := [][]int{{1, 2}, {3, 4}, {5, 6}}
fmt.Println(len(mat), ", ", cap(mat)) //3, 3
fmt.Println(len(mat[0]), ", ", cap(mat[0])) //2, 2
fmt.Println(mat) //[[1, 2], [3, 4], [5, 6]]
}
情况三(推荐使用)
package main
import "fmt"
func main() {
var mat [][]int
for i := 0; i < 5; i++ {
nums := make([]int, 4)
mat = append(mat, nums)
}
fmt.Println(len(mat), ", ", cap(mat)) //5, 8
fmt.Println(len(mat[0]), ", ", cap(mat[0])) //4, 4
fmt.Println(mat)
//[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
}