在golang中创建二维字符串数组

我需要创建一个二维字符串数组,如下所示 -


matrix = [['cat,'cat','cat'],['dog','dog']]

代码:-


package main


import (

    "fmt"

)


func main() {

    { // using append


    var matrix [][]string

    matrix[0] = append(matrix[0],'cat')

        fmt.Println(matrix)

    }

}

错误:-


panic: runtime error: index out of range


goroutine 1 [running]:

main.main()

    /tmp/sandbox863026592/main.go:11 +0x20


翻阅古今
浏览 156回答 2
2回答

慕妹3242003

你有一片切片,外层切片nil直到它被初始化:matrix := make([][]string, 1)matrix[0] = append(matrix[0],'cat')fmt.Println(matrix)或者:var matrix [][]stringmatrix = append(matrix, []string{"cat"})fmt.Println(matrix)或者:var matrix [][]stringvar row []stringrow = append(row, "cat")matrix = append(matrix, row)

森林海

用 Go 做二维数组的问题是你必须单独初始化每个部分,例如,如果你有一个[][]bool,你必须[]([]bool)先分配,然后再分配个人[]bool;无论您是否正在使用make()或append()执行分配,这都是相同的逻辑。在你的例子中,matrix[0]仅仅 之后还不存在var matrix [][]string,因此你得到了index out of range错误。例如,下面的代码将根据不同类型的现有切片的大小创建另一个切片:func solve(board [][]rune, …) {    x := len(board)    y := len(board[0])    visited := make([][]bool, x)    for i := range visited {        visited[i] = make([]bool, y)    }…如果你只是想根据你拥有的静态数组初始化切片,你可以直接这样做,甚至不必使用append()or make():package mainimport (    "fmt")func main() {    matrix := [][]string{{"cat", "cat", "cat"}, {"dog", "dog"}}    fmt.Println(matrix)}
打开App,查看更多内容
随时随地看视频慕课网APP