如何为fmt.sprintf拆分长行

时间:2016-02-01 23:41:31

标签: go gofmt

我在fmt.Sprintf中有很长的一行。如何在代码中拆分它?我不想把所有东西放在一行中,所以代码看起来很难看。

fmt.Sprintf("a:%s, b:%s  ...... this goes really long")

5 个答案:

答案 0 :(得分:12)

使用string concatenation在多行上构建单个字符串值:

 fmt.Sprintf("a:%s, b:%s " +
    " ...... this goes really long",
    s1, s2)

您可以使用raw string literal

在包含的换行符中拆分字符串
     fmt.Sprintf(`this text is on the first line
and this text is on the second line,
and third`)

答案 1 :(得分:2)

由于您已经使用Sprintf(意味着您将拥有一个字符串,例如“这是包含%s占位符的字符串”),您可以在字符串中添加更多占位符,然后将其放入你想在自己的路上喜欢的价值观,如;

fmt.Sprintf("This %s is so long that I need %s%s%s for the other three strings,
"string",
"some super long statement that I don't want to type on 50 lines",
"another one of those",
"yet another one of those")

另一种选择就是使用像"string 1" + "string 2"这样的字符串连接。

答案 2 :(得分:1)

为什么不将它拆分出来:

fmt.Sprintf("a:%s, b:%s ", x1, x2)

fmt.Sprintf("...... ")

fmt.Sprintf("this goes really long")

或者你可以用MuffinTop指示的加号将它们分开。

答案 3 :(得分:0)

您还可以在内部反引号中使用raw string literals,如下所示:

columns := "id, name"
table := "users"
query := fmt.Sprintf(`
    SELECT %s
    FROM %s
  `, columns, table)
fmt.Println(query)

这种方法有一些注意事项:

  1. 原始字符串不解析转义序列
  2. 将保留所有空格,因此在此查询的FROM子句之前会有换行符和几个制表符。
  3. 这些问题对某些人来说可能是一个挑战,而空白会产生一些难看的结果字符串。但是,我更喜欢这种方法,因为它允许您在代码之外复制和粘贴长而复杂的SQL查询,并将其复制并粘贴到其他上下文中,例如用于测试的sql工作表。

答案 4 :(得分:0)

另一个选项是strings.Builder

package main

import (
   "fmt"
   "strings"
)

func main() {
   b := new(strings.Builder)
   fmt.Fprint(b, "North")
   fmt.Fprint(b, "South")
   println(b.String() == "NorthSouth")
}

https://golang.org/pkg/strings#Builder