我想调用一个可变函数并动态组合参数。以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中实现这一目标?
答案 0 :(得分:4)
使用省略号运算符
slice := []Type{Type{}, Type{}}
call(slice...)
for function
func(arg ...Type) {}