为了账号安全,请及时绑定邮箱和手机立即绑定

如何在Go中包装var args?

如何在Go中包装var args?

Go
月关宝盒 2021-05-16 14:47:59
根据几个小组的帖子,以下代码应该起作用: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 回答

?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

fmt.Printf(format, args...) 应该做我想做的事。


查看完整回答
反对 回复 2021-05-31
  • 2 回答
  • 0 关注
  • 191 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信