如何在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