为日志消息或stderr消息编写长而信息丰富的字符串通常很好。 Python使用逗号分隔的字符串文字来处理它,例如:
log.warn("The operation failed on the %d iteration. "
"Resumed on the %d iteration.",
failed, resumed)
Go似乎有一个原始字符串文字的解决方案,使用后引号,但我找不到任何解释字符串文字的样式指南。我错过了什么或者除了使用变量之外别无选择吗? E.g。
msg := fmt.Sprintf("The operation failed on the %d iteration. ", failed)
msg += fmt.Sprintf("Resumed on the %d iteration.", resumed)
log.println(msg)
答案 0 :(得分:2)
您可以使用+
:
fmt.Printf("The operation failed on the %d iteration. "+
"Resumed on the %d iteration.",
failed, resumed,
)
标准库中有一些使用+
的例子,其中大部分都在测试中。 Example。有关更多示例,请参阅此搜索请求:http://golang.org/search?q=%22\%2B\n。
答案 1 :(得分:1)
首先,我没有看到你的python示例如何工作。这是类似的东西:
>>> import logging
>>> logging.warn("foo %d", "bar %d", 1,2)
导致:
TypeError: %d format: a number is required, not str
其次,在Go中,您有几个选择:
多行字符串:
msg := fmt.Sprintf(`The operation failed on the %d iteration.
Resumed on the %d iteration.`, 2, 3)
log.Println(msg)
但这会产生多行消息。
另一种选择:
log.Println(fmt.Sprintf("The operation failed on the %d iteration. ", failed),
fmt.Sprintf("Resumed on the %d iteration.", resumed))
它们看起来都更好,并且可能比字符串连接更快。