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

huangapple go评论92阅读模式
英文:

Go - Passing an array to a function receiving argument list

问题

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

  1. func Yalla(i...interface{}) {
  2. fmt.Println(i...)
  3. }
  4. func main() {
  5. Yalla(1,2,3)
  6. Yalla([]int{1,2,3})
  7. }

输出结果为:

  1. 1 2 3 //好的
  2. [1 2 3] //不好的

这样写会导致错误:

  1. Yalla([]int{1,2,3}...)

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

英文:

How can I pass an array as interface{} argument list in go?

  1. func Yalla(i...interface{}) {
  2. fmt.Println(i...)
  3. }
  4. func main() {
  5. Yalla(1,2,3)
  6. Yalla([]int{1,2,3})
  7. }

Will output:

  1. 1 2 3 //good
  2. [1 2 3] //bad

This:

  1. Yalla([]int{1,2,3}...)

Will generate an error.

I know I can make a new interface array and assign the values one by one to solve this, but is there an elegant way to do it?

答案1

得分: 5

将一个整数数组转换为interface{}切片没有简洁的快捷方式。你需要编写for循环。

调用

  1. Yalla([...]int{1,2,3}...)

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

  1. Yalla([...]int{1,2,3}[:]...)

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

你可以按照FAQ中所示的方式复制值,

  1. Yalla([]interface{}{1,2,3}...)

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

  1. func Yalla(i ...int) {
  2. }

如果你总是传递整数的话。

英文:

There is no elegant shortcut for converting from an array of integers to a slice of interface{}. You need to write the for loop.

The call

  1. Yalla([...]int{1,2,3}...)

does not compile because an array of integers and a slice of interface{} are different types. You can easily create a slice over the array using [:]:

  1. Yalla([...]int{1,2,3}[:]...)

but this does not solve the problem because a slice of integers and a slice of interface{} are different types as explained in the FAQ.

You either need to copy the values as shown in the FAQ, start with a slice of interface{}

  1. Yalla([]interface{}{1,2,3}...)

or change the variadic argument type to int

  1. func Yalla(i ...int) {
  2. }

if that's what you are always passing.

huangapple
  • 本文由 发表于 2014年9月30日 00:09:35
  • 转载请务必保留本文链接:https://go.coder-hub.com/26104236.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定