如何在go中传递数组作为interface {}参数列表?
func Yalla(i...interface{}) {
fmt.Println(i...)
}
func main() {
Yalla(1,2,3)
Yalla([]int{1,2,3})
}
将输出:
1 2 3 //good
[1 2 3] //bad
这:
Yalla([]int{1,2,3}...)
会产生错误。
我知道我可以制作一个新的接口(interface)数组并逐个分配值来解决此问题,但是有一种优雅的方法吗?
最佳答案
从整数数组转换为接口(interface){}的 slice 没有完美的捷径。您需要编写for循环。
通话
Yalla([...]int{1,2,3}...)
无法编译,因为整数数组和interface {}的 slice 是不同的类型。您可以使用
[:]
在数组上轻松创建一个 slice :Yalla([...]int{1,2,3}[:]...)
但这不能解决问题,因为整数 slice 和interface {} slice 是不同类型as explained in the FAQ。
您要么将值复制为shown in the FAQ,然后从一片接口(interface){}开始
Yalla([]interface{}{1,2,3}...)
或将可变参数类型更改为int
func Yalla(i ...int) {
}
如果那是你一直在传递的东西。