为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
萧十郎 2023-05-04 17:04:10
我需要一个包含多种类型的抽象切片。最简化的代码是这样的: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])

}


查看完整回答
反对 回复 2023-05-04
  • 1 回答
  • 0 关注
  • 66 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信