Go - 将数组传递给接收参数列表的函数

时间:2014-09-29 16:09:35

标签: function interface go argument-passing

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

我知道我可以创建一个新的接口数组并逐个分配值来解决这个问题,但有一种优雅的方法吗?

1 个答案:

答案 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) {

}

如果那是你总是在路过的东西。