我需要创建一个二维字符串数组,如下所示-
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
答案 0 :(得分:1)
您有一个切片切片,外部切片在初始化之前为nil
:
matrix := make([][]string, 1)
matrix[0] = append(matrix[0],'cat')
fmt.Println(matrix)
或者:
var matrix [][]string
matrix = append(matrix, []string{"cat"})
fmt.Println(matrix)
或者:
var matrix [][]string
var row []string
row = append(row, "cat")
matrix = append(matrix, row)
答案 1 :(得分:0)
使用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()
或make()
:
package main
import (
"fmt"
)
func main() {
matrix := [][]string{{"cat", "cat", "cat"}, {"dog", "dog"}}
fmt.Println(matrix)
}