Как разбить длинные строки на 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)
Есть несколько оговорок к этому подходу:
- Необработанные строки не анализируют escape-последовательности
- Все пробелы будут сохранены, поэтому будет новая строка, а затем несколько вкладок перед
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")
}
Так как вы используете 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.