Wayned's Blog

如何提问是一个好问题

Sep 3, 2023 - 1 minute read - Go

初始化 Go 语言中的二维切片

package main

import "fmt"

func main() {
	row, col := 4, 5

	// 将 matrix 定义为一个二维切片
	// 行列都未初始化
	var matrix1 [][]int
	for i := 0; i < row; i++ {
		// 初始化一个长度为 col 的切片作为 matrix 的每行
		rowVector := make([]int, col)
		// 由于 matrix 只是被定义成了一个二维切片,行列未初始化
		// 因此这里只能 append
		matrix1 = append(matrix1, rowVector)
		// 如果按照下面这样直接赋值,会 panic,索引越界
		//matrix1[i] = rowVector
	}

	// 将 matrix 初始化为一个二维切片
	// 并且行数为 row ,但是每行的长度并未定义
	matrix2 := make([][]int, row)
	// 遍历 matrix 的每行
	for i := range matrix2 {
		// 定义并初始化一个切片,作为 matrix 的每行
		// 这里由于初始化了 matrix 的行数为 row,因此可以直接赋值
		matrix2[i] = make([]int, col)
	}

	fmt.Println(matrix1)
	fmt.Println(matrix2)
}