如何在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) {

}

如果那是你一直在传递的东西。

09-25 19:58