我需要一个包含多种类型的抽象切片。最简化的代码是这样的:package mainimport "fmt"type A interface{}type X stringfunc 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 中?提前谢谢你们!
1 回答
撒科打诨
TA贡献1934条经验 获得超2个赞
问题是interface{}和string是两种不同的类型。要将切片从 转换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])
}
- 1 回答
- 0 关注
- 89 浏览
添加回答
举报
0/150
提交
取消