格式字符串中没有占位符

Enr*_*zar 0 go

这个问题是关于在 Go 中格式化字符串时的最佳实践。

每当我像这样使用打印库时:

log.Printf("Greeting:",resp.GetMessage())

我从 IDE (Goland) 收到一条警告:

No placeholders in format string

这意味着什么?正确的印刷品应该是什么样子?

icz*_*cza 8

log.Printf()需要一个格式字符串作为其第一个参数:

func Printf(format string, v ...interface{})
Run Code Online (Sandbox Code Playgroud)

格式字符串是一个字符串,您可以在其中使用带有修饰符的动词来布置您希望结果字符串的外观。没有任何动词的格式字符串可能是一个错误(表明您可能忘记了其中的某些内容,或者如果它确实不需要动词,则不应使用需要Pritnf()格式字符串的格式)。您可以在包的文档中阅读有关格式字符串及其 Go 语法的更多信息fmt

例如,这是一个格式字符串:

"Greeting: %s"
Run Code Online (Sandbox Code Playgroud)

这是它的使用方式:

log.Printf("Greeting: %s", resp.GetMessage())
Run Code Online (Sandbox Code Playgroud)

这是一个非常简单的示例,不保证格式化输出。如果您没有格式字符串,请使用log.Print()log.Println()代替(它们不需要格式字符串):

log.Println("Greeting:", resp.GetMessage())
Run Code Online (Sandbox Code Playgroud)

Printf()当您需要更复杂的格式,而不仅仅是记录 2 个字符串(连接)时,该变体会很方便。

例如:

log.Printf("Hi, my name is %s, and I'm %d years old.", "Bob", 22)
Run Code Online (Sandbox Code Playgroud)

输出将是(在Go Playground上尝试):

2009/11/10 23:00:00 Hi, my name is Bob, and I'm 22 years old.
Run Code Online (Sandbox Code Playgroud)