如何在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{}的片断,并没有什么好的捷径。你需要编写for循环。
调用
Yalla([...]int{1,2,3}...)
不能编译,因为整数数组和 interface{} 的 slice 是不同的类型。你可以很容易地在数组上使用 [:]
:
Yalla([...]int{1,2,3}[:]...)
但这并不能解决这个问题,因为整数片和接口{}片是不同的类型。如同常见问题解答中所解释的.
你需要把这些值复制成 常见问题解答中显示,从一片interface{}开始。
Yalla([]interface{}{1,2,3}...)
或将变量参数类型改为int。
func Yalla(i ...int) {
}
如果你总是通过。