猿问

append() 中的“...”符号不适用于附加不同类型的切片

我需要一个包含多种类型的抽象切片。最简化的代码是这样的:


package main


import "fmt"


type A interface{}


type X string


func main() {

    sliceA := make([]A, 0, 0)

    sliceX := []X{"x1", "x2"}

    var appendedSlice []A

    appendedSlice = append(sliceA, sliceX[0], sliceX[1])  // (1) works

    appendedSlice = append(sliceA, sliceX...)             // (2) doesn't work

    fmt.Println(appendedSlice)


}

在我的真实程序中,接口A定义了一些功能,X和其他类型也实现了它。


第 (2) 行引发错误cannot use sliceX (type []X) as type []A in append。


我认为 (2) 是 (1) 的语法糖,但我可能遗漏了一些东西……我是否必须始终将元素 X 一个一个地添加到切片 A 中?


提前谢谢你们!


萧十郎
浏览 90回答 1
1回答

撒科打诨

问题是interface{}和string是两种不同的类型。要将切片从 转换string为interface{}您必须通过以下方式之一进行:创建 sliceA 并将其大小初始化为 sliceX 长度sliceA := make([]A, len(sliceX))for ix, item := range sliceX {    sliceA[ix] = item}动态地将 sliceX 项附加到 appendedSlicevar appendedSlice []Afor ix := range sliceX {    appendedSlice = append(appendedSlice, sliceX[ix])}
随时随地看视频慕课网APP

相关分类

Go
我要回答