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

问题描述 投票:1回答:1

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

会产生一个错误。

我知道我可以做一个新的接口数组,然后逐个赋值来解决这个问题,但是有什么优雅的方法吗?

function go interface parameter-passing
1个回答
4
投票

从一个整数数组转换到一个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) {

}

如果你总是通过。

© www.soinside.com 2019 - 2024. All rights reserved.