golang:可变参数的动态组合

时间:2017-02-26 03:16:16

标签: go

我想调用一个可变函数并动态组合参数。以fmt.Printf()为例。如果我有struct

type Foo struct {
   a int
   b string
}

我想致电fmt.Printf(foo.a, foo.b).但如果我有另外一个Bar struct有3个字段,我想致电fmt.Printf(bar.a, bar.b, bar.c)

所以我想编写一个这样的函数:

func MyPrint(obj interface{})

并且可以使用MyPrint(foo)MyPrint(bar)来调用它,代码会自动确定foo有2个字段并执行:

...
fmt.Printf(foo.a, foo.b)

bar有3个字段并且

...
fmt.Printf(bar.a, bar.b, bar.c)

在Python中,您可以执行call(*list)之类的操作。我怎样才能在Go中实现这一目标?

1 个答案:

答案 0 :(得分:4)

使用省略号运算符

slice := []Type{Type{}, Type{}}
call(slice...)

for function

func(arg ...Type) {}