英文:
Interpreted string literals in Go
问题
通常在日志消息或标准错误消息中编写长而详细的字符串是很好的。Python使用逗号分隔的字符串字面值来处理这个问题,例如:
log.warn("The operation failed on the %d iteration. "
"Resumed on the %d iteration.",
failed, resumed)
Go似乎有一种使用反引号的原始字符串字面值的解决方案,但我找不到任何关于解释字符串字面值的样式指南。我是不是漏掉了什么,或者除了使用变量之外没有其他选择?例如:
msg := fmt.Sprintf("The operation failed on the %d iteration. ", failed)
msg += fmt.Sprintf("Resumed on the %d iteration.", resumed)
log.println(msg)
英文:
It's frequently nice to write long, informative strings for log messages or stderr messages. Python handles this with comma separated string literals, like:
log.warn("The operation failed on the %d iteration. "
"Resumed on the %d iteration.",
failed, resumed)
Go appears to have a solution for raw string literals, by using back quotes but I can't find any style guide for interpreted string literals. Am I missing something or is there no option but to use a variable? 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)
答案1
得分: 2
你可以直接使用+
符号:
fmt.Printf("The operation failed on the %d iteration. "+
"Resumed on the %d iteration.",
failed, resumed,
)
在标准库中有一些使用+
符号的示例,其中大部分在测试中使用。示例。更多示例请参考以下搜索结果:http://golang.org/search?q=%22%2B\n。
英文:
You could just use +
:
fmt.Printf("The operation failed on the %d iteration. "+
"Resumed on the %d iteration.",
failed, resumed,
)
There are examples in the standard library of using +
for that, most of them in tests. Example. For more examples see this search request: http://golang.org/search?q=%22%2B\n.
1: http://golang.org/search?q=%22%5C%2B%5Cn "examples"
答案2
得分: 0
首先,我不明白你的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))
这种方式看起来更好,而且可能比字符串拼接更快。
英文:
First of all, I don't see how your python example would even work. Here's something similar:
>>> import logging
>>> logging.warn("foo %d", "bar %d", 1,2)
causes:
TypeError: %d format: a number is required, not str
Second, in Go, you have a few options:
Multi-line strings:
msg := fmt.Sprintf(`The operation failed on the %d iteration.
Resumed on the %d iteration.`, 2, 3)
log.Println(msg)
But this will result in a multiline message.
Another option:
log.Println(fmt.Sprintf("The operation failed on the %d iteration. ", failed),
fmt.Sprintf("Resumed on the %d iteration.", resumed))
which both looks better and will probably be faster than string concatenation.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论