如何在声明后为空切片赋值

Ven*_* Ch 2 go slice

我试图将值分配给空切片,如下所示.

func main() {
    var s []int
    fmt.Println(s, len(s), cap(s))
    s[0] = 99
}
Run Code Online (Sandbox Code Playgroud)

它会抛出异常,

恐慌:运行时错误:索引超出范围

注意:我知道通过在声明部分初始化值来实现此目的的一种方法,如下所示.但在上面的例子中,我试图在声明后分配一个值.

var s []int{99}
Run Code Online (Sandbox Code Playgroud)

有没有办法实现这个目标?

Mar*_*arc 6

无法将空切片分配给.您的print语句显示切片的长度和容量为0.索引处于[0]绝对超出范围.

你有(至少)三种选择:

  • 附加到切片: s = append(s, 99)
  • 或者将切片初始化为非空: s := make([]int, 1)
  • 或者使用您想要的元素初始化切片: s := []int{99}

您可以在Go tour中找到关于切片的教程,或者有关切片使用和内部的更多详细信息.