我需要一个包含多个类型的抽象 slice 。最简化的代码是这样的:
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)
}
在我的真实程序中,接口(interface)A定义了一些功能,而X和其他类型则实现了它。
第(2)行引发错误
cannot use sliceX (type []X) as type []A in append
。我以为(2)是(1)的语法糖,但我可能遗漏了某些东西...是否必须始终将元素X逐一添加到 slice A中?
预先谢谢你们!
最佳答案
问题在于interface{}
和string
是两种不同的类型。
要将 slice 从string
转换为interface{}
,您将必须通过以下方式之一进行操作:
创建sliceA并将其大小初始化为sliceX长度
sliceA := make([]A, len(sliceX))
for ix, item := range sliceX {
sliceA[ix] = item
}
动态将sliceX项附加到appendedSlice
var appendedSlice []A
for ix := range sliceX {
appendedSlice = append(appendedSlice, sliceX[ix])
}
请在这里阅读更多
Convert []string to []interface{}