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

Ron*_*nna 2 interface function parameter-passing go

如何在 go 中将数组作为 interface{} 参数列表传递?

func Yalla(i...interface{}) {
    fmt.Println(i...)
}

func main() {
    Yalla(1,2,3)
    Yalla([]int{1,2,3})
}
Run Code Online (Sandbox Code Playgroud)

将输出:

1 2 3 //good
[1 2 3] //bad
Run Code Online (Sandbox Code Playgroud)

这个:

Yalla([]int{1,2,3}...)
Run Code Online (Sandbox Code Playgroud)

会产生错误。

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

Sim*_*Fox 5

从整数数组转换为接口切片没有优雅的快捷方式。{} 您需要编写 for 循环。

电话

Yalla([...]int{1,2,3}...)
Run Code Online (Sandbox Code Playgroud)

无法编译,因为整数数组和 interface{} 切片是不同的类型。您可以使用以下方法轻松地在数组上创建切片[:]

Yalla([...]int{1,2,3}[:]...)
Run Code Online (Sandbox Code Playgroud)

但这并不能解决问题,因为如常见问题中所述,整数切片和 interface{} 切片是不同的类型。

您要么需要复制常见问题解答中显示的值,从一个界面开始{}

Yalla([]interface{}{1,2,3}...)
Run Code Online (Sandbox Code Playgroud)

或将可变参数类型更改为 int

func Yalla(i ...int) {

}
Run Code Online (Sandbox Code Playgroud)

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

  • 正如我所写,“我知道我可以创建一个新的接口数组并一个一个地分配值”,但这并没有回答我关于 i...interface{} 函数签名的问题,这可能是为了允许更多灵活性? (2认同)