Go 中初始化数组时使用 spread

我有一个重复的值列表,我想在初始化多个数组时重复使用这些值:


package main


import (

    "fmt"

)


func main() {

    var i = []int{1, 2, 3}

    var a = []int{2, i..., 3}

    fmt.Println(a)

}


上面的代码给出了以下错误:


./prog.go:9:20: 语法错误:意外...,需要逗号或 }


我想使用扩展...运算符,但这在初始化数组时似乎不可能。


我在这里遗漏了什么或者不允许传播吗?


慕村225694
浏览 147回答 1
1回答

MMMHUHU

您只能...在将切片传递给可变参数函数时使用它。例如,您可以在将其传递给时使用它append():var i = []int{1, 2, 3} a := append([]int{2}, i...) a = append(a, 3) fmt.Println(a)哪个输出(在Go Playground上尝试):[2 1 2 3 3]或者,上面的内容可以写在一行中:a := append(append([]int{2}, i...), 3)请注意,这可能很紧凑,但不一定高效,因为它可能会在后台创建和复制多个支持阵列。为了确保单一分配,您可以使用make()提供的容量,例如:a := make([]int, 0, 2+len(i)) a = append(a, 2) a = append(a, i...) a = append(a, 3)在Go Playground上试试这个。另一种解决方案是copy()如果您预先分配了切片(使用make()或使用复合文字中的索引):a := []int{2, 4: 3}copy(a[1:], i)在Go Playground上试试这个。这里的缺点是索引(4: 3)必须是常量并且不能是类似 的东西1 + len(i)。如果您想预先分配切片(例如make([]int, 2+len(i))),则不能将其与复合文字结合起来来列出元素。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go