如何在Go中包装var args?

如何在Go中包装var args?,go,Go,根据几个小组的帖子,以下代码应该有效: package main import "fmt" func demo(format string, args ...interface{}) { var count = len(args) for i := 0; i < count; i++ { fmt.Printf("! %s\n", args[i]) } fmt.Printf("%+v\n", format) fmt.Printf("%+v\n", args)

根据几个小组的帖子,以下代码应该有效:

package main

import "fmt"

func demo(format string, args ...interface{}) {
  var count = len(args)
  for i := 0; i < count; i++ {
    fmt.Printf("! %s\n", args[i])
  }
  fmt.Printf("%+v\n", format)
  fmt.Printf("%+v\n", args)
  fmt.Printf(format, args)
  fmt.Printf("\n")
}

func main() {
  demo("%s %d", "Hello World", 10)
  fmt.Printf("\n\n")
  demo("%d %s", 10, "Hello")
}
也就是说,将[]接口{}传递给以…接口{}为参数的函数不会扩展参数,而只是将其作为值传递。前%s将[]接口{}扩展为字符串,不再处理其他参数

我确信在很多情况下,在日志记录中都需要这样做;但我找不到任何有效的例子来说明如何做到这一点


这基本上就是C中的“vprintf”函数系列。

我认为OP程序不应该“工作”。也许这是有意的(?):

(也


输出:

Hello World 10

10 Hello

fmt.Printf(format,args…
我认为应该做你想做的事。

啊,谢谢你。对于下一个找不到它的人,它隐藏在这里,作为规范中的一个注释:@Doug,这似乎是任何新接触该语言的人必须阅读的东西。
package main

import "fmt"

func demo(format string, args ...interface{}) {
        fmt.Printf(format, args...)
}

func main() {
        demo("%s %d\n\n", "Hello World", 10)
        demo("%d %s", 10, "Hello")
}
Hello World 10

10 Hello