调用有可能的格式化指令

新手上路,请多包涵

当我运行这段代码时

package main
import ("fmt")
func main() {
    i := 5
    fmt.Println("Hello, playground %d",i)
}

游乐场链接

我收到以下警告:

 prog.go:5: Println call has possible formatting directive %d
Go vet exited.

这样做的正确方法是什么?

原文由 Yevgeniy Gendelman 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.4k
2 个回答

fmt.Println 不会像 %d 那样格式化。相反,它使用其参数的默认格式,并在它们之间添加空格。

 fmt.Println("Hello, playground",i)  // Hello, playground 5

如果您想要 printf 样式格式,请使用 fmt.Printf

 fmt.Printf("Hello, playground %d\n",i)

而且你不需要特别注意类型。 %v 通常会弄清楚。

 fmt.Printf("Hello, playground %v\n",i)

原文由 Schwern 发布,翻译遵循 CC BY-SA 4.0 许可协议

该警告告诉您在对 %d 的调用中有格式化指令(在本例中为 Println )。这是一个警告,因为 Println _不支持格式化指令_。这些指令由格式化函数 PrintfSprintf 支持。这在 fmt 包文档 中有详细解释。

正如您在运行代码时可以清楚地看到的那样,输出是

Hello, playground %d 5

因为 Println 其文档所说的进行操作 - 它打印其参数后跟一个换行符。将其更改为 Printf ,这可能是您想要的, 而您得到 的是:

 Hello, playground 5

这大概是你想要的。

原文由 Adrian 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题