我是golang的新手,并尝试用小例子学习。
所以我正在尝试创建一个2D数组并分配一个值,但我被困在这里可以有人帮助我。这是我的代码。
package main
import (
"fmt"
)
func main() {
fmt.Println("Hello, playground")
letters := make([][]string,0,2)
letters[0][0] = "a"
letters[0][1] = "b"
letters[1][0] = "c"
letters[1][1] = "d"
fmt.Println(letters)
}
运行此代码时出现错误
恐慌:运行时错误:索引超出范围
答案 0 :(得分:0)
The Go Programming Language Specification
数组是单个类型的元素的编号序列,称为 元素类型。元素的数量称为长度 从不消极。
切片是底层的连续段的描述符 数组并提供对该数字的编号序列的访问 阵列。切片类型表示其所有数组切片的集合 元素类型。未初始化切片的值为零。
Making slices, maps and channels
内置函数make采用类型T,它必须是切片,地图 或通道类型,可选地后跟特定类型的列表 表达式。它返回类型T的值(不是* T)。记忆是 如初始值一节中所述初始化。
Appending to and copying slices
内置函数在公共切片中追加和复制辅助 操作。对于这两个函数,结果与是否无关 参数引用的内存重叠。
可变参数函数append将零或更多值x附加到s type S,必须是切片类型,并返回结果切片, 也是S型。
在Go中,数组和切片不是一回事。您的make([][]string,0,2)
语句会创建一个2D切片。这是您的2D切片,其初始值为
package main
import (
"fmt"
)
func main() {
letters := make([][]string, 2)
letters[0] = append(letters[0], "a", "b")
letters[1] = append(letters[1], "c", "d")
fmt.Println(letters)
}
游乐场:https://play.golang.org/p/l40xv_7W5h
输出:
[[a b] [c d]]