根据几个小组的帖子,以下代码应该起作用:package mainimport "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")}并生成“ Hello World 10”和“ 10 Hello”,但事实并非如此。相反,它产生:! Hello World! %!s(int=10)%s %d[Hello World 10][Hello World %!s(int=10)] %d(MISSING)! %!s(int=10)! Hello%d %s[10 Hello][10 %!d(string=Hello)] %s(MISSING)也就是说,将[] interface {}传递给以... interface {}作为参数的函数不会扩展参数,而只是将其作为值传递。第一个 %s 将 []interface{} 扩展为字符串,不再处理其他参数。我敢肯定,在很多情况下,日志记录都需要这样做;但我找不到任何可行的示例。这基本上是C语言中的'vprintf'函数族。
- 2 回答
- 0 关注
- 191 浏览
添加回答
举报
0/150
提交
取消