如何在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}...)
会产生错误:
不能在[Yalla]的参数中使用[3] int literal(type [3] int)作为类型[] interface {}
我知道我可以创建一个新的接口数组并逐个分配值来解决这个问题,但有一种优雅的方法吗?
答案 0 :(得分:4)
从整数数组转换为接口{}切片没有优雅的快捷方式。你需要编写for循环。
电话
Yalla([...]int{1,2,3}...)
不编译,因为整数数组和接口{}的切片是不同的类型。您可以使用[:]
:
Yalla([...]int{1,2,3}[:]...)
但这并没有解决问题,因为整数切片和接口{}切片是不同的类型as explained in the FAQ。
您需要将值复制为shown in the FAQ,从界面{}
开始Yalla([]interface{}{1,2,3}...)
或将variadic参数类型更改为int
func Yalla(i ...int) {
}
如果那是你总是在路过的东西。