douhuang2218
2017-02-26 03:16
浏览 218
已采纳

golang:可变参数函数的动态组成

I'd like to call a variadic function and compose the parameter dynamically. Take fmt.Printf() for example. if I have a struct:

type Foo struct {
   a int
   b string
}

I'd like to call fmt.Printf(foo.a, foo.b). But if I have another Bar struct with 3 fields, I'd like to call fmt.Printf(bar.a, bar.b, bar.c).

So I'd like to write a function like this:

func MyPrint(obj interface{})

and be able to call it with MyPrint(foo) or MyPrint(bar) and the code will automatically figure out that foo has 2 fields and do:

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

bar has 3 fields and do

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

In Python you can do something like call(*list). How can I achieve this in Go?

图片转代码服务由CSDN问答提供 功能建议

我想调用可变参数函数并动态地编写参数。 以 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个字段并执行: \ n

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

bar 有3个字段并执行

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

在Python中,您可以执行 call(* list)之类的操作。 如何在Go中实现此目标?

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • dongyong2063 2017-02-26 07:16
    已采纳

    Use ellipsis operator

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

    for function

    func(arg ...Type) {}
    
    打赏 评论

相关推荐 更多相似问题