在Go中解释字符串文字

时间:2014-10-06 10:49:31

标签: go coding-style

为日志消息或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)

2 个答案:

答案 0 :(得分:2)

您可以使用+

fmt.Printf("The operation failed on the %d iteration. "+
    "Resumed on the %d iteration.",
    failed, resumed,
)

Playground

标准库中有一些使用+的例子,其中大部分都在测试中。 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))

它们看起来都更好,并且可能比字符串连接更快。