Как разбить длинные строки на fmt.sprintf

У меня очень длинная строка в fmt.Sprintf. Как мне разделить это в коде? Я не хочу помещать все в одну строку, чтобы код выглядел ужасно.

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

5 ответов

Используйте конкатенацию строк, чтобы создать одно строковое значение из нескольких строк:

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

Вы можете разбить строку на содержащиеся в ней новые строки, используя необработанный строковый литерал:

     fmt.Sprintf(`this text is on the first line
and this text is on the second line,
and third`)

Вы также можете использовать необработанные строковые литералы внутри обратных тегов, например так:

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

Есть несколько оговорок к этому подходу:

  1. Необработанные строки не анализируют escape-последовательности
  2. Все пробелы будут сохранены, поэтому будет новая строка, а затем несколько вкладок перед FROM предложение в этом запросе.

Эти проблемы могут быть проблемой для некоторых, и пробел будет производить некоторые уродливые результирующие строки. Однако я предпочитаю этот подход, поскольку он позволяет вам копировать и вставлять длинные сложные запросы SQL вне вашего кода и в другие контексты, такие как таблицы SQL для тестирования.

Другой вариант - 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

Так как вы используете 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",

Почему бы тебе не разделить это:

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

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

fmt.Sprintf("this goes really long")

Или вы можете разделить их со знаком плюс, как указано в MuffinTop.

Другие вопросы по тегам