Golang:可变函数参数的动态组合

5

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

type Foo struct {
   a int
   b string
}

我想调用fmt.Printf(foo.a, foo.b)。但是如果我有另一个有3个字段的Bar struct,我想调用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中实现这一点?

你是否正在尝试创建一个可以接受任何类型结构体的函数?如果是这样,那么简单地使用[]interface即可。 - Gujarat Santana
@GujaratSantana 是的。但是 [] interface 无法被 func(params ... interface{}) 接受。 - lang2
“动态组合”到底是什么意思? func boo(params ...interface{}){} 似乎能解决你的问题。 - Rodrigo
1个回答

8
使用省略号运算符
slice := []Type{Type{}, Type{}}
call(slice...)

关于函数

func(arg ...Type) {}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接