В соответствии со спецификацией языка вы можете использовать необработанный строковый литерал, где строка отделяется обратными кавычками вместо двойных кавычек.
В качестве примечания: «Необработанная цитата», как она называется, не анализирует escape-последовательности. Поэтому строковый литерал предпочтителен для написания шаблонов регулярных выражений, поскольку они обычно содержат нестандартные escape-последовательности, которые заставили бы компилятор Go жаловаться на то, что он не был дважды экранирован. Он сохраняет шаблоны чистыми и относительно читаемыми.
Джимт
10
Нужно быть осторожным с этим при использовании конечных пробелов. Например, если вы поставите пробел после line 1того, как он будет невидимым в вашем редакторе, но присутствует в строке.
Ory Band
2
@DanieleD Это небольшое несоответствие, но какой диалект? Предположительно в основном MySQL? stackoverflow.com/a/10574031 Обратите внимание, что из-за расширения одного и того же аргумента сложно внедрить уценку или сценарии оболочки (если вы решите использовать backtick вместо $(abcd)).
Иван Вучица,
8
@KyleHeuton: Предположительно, Даниэль D использует символ обратного течения в своих SQL-запросах (как это часто делают пользователи MySQL) и считает болезненным необходимость представлять его как `+" `" + `и нарушать возможность копирования и вставки.
Руах
1
Обратной стороной этого является то, что если вы пишете его внутри кода с отступом, вкладки будут включены в строку, и избавление от них сделает ваш код уродливым. При таких обстоятельствах я предпочел бы использовать ответ Азима
Lost Crotchet
112
Ты можешь написать:
"line 1"+"line 2"+"line 3"
что так же, как:
"line 1line 2line3"
В отличие от использования обратных тиков, он сохранит escape-символы. Обратите внимание, что «+» должен быть в «ведущей» строке, то есть:
Это решение не аналогично многострочным строкам Python. Он разбивает строковый литерал на несколько строк, но сама строка не содержит нескольких строк.
Бен Батлер-Коул
2
Поскольку это сохраняет escape-символы, новые строки могут быть просто добавлены, \nи намного проще работать с динамическими строками и тому подобным. Если я прав, принятый ответ действительно для статических строк в коде, чтобы он выглядел красиво.
RisingSun
1
Разве это не будет очень неэффективно? Пусть строка будет 3x последовательность из 6 символов: 6 + 2 * 6 + 3 * 6 = 36 символов, выделенных, когда оптимальным будет 18 (поскольку строки неизменяемы, каждый раз, когда вы добавляете две строки, создается новая строка с длиной двух соединенные строки).
ничего
@ N0thing: если есть только строковые литералы, нет различий во время выполнения, так как компилятор будет оптимизировать. Но есть небольшая (микросекунды или даже наносекунды) разница во времени компиляции.
дольмен
Я считаю, что это лучший способ получить многострочный строковый литерал с окончаниями строк CRLF
Используйте необработанные строковые литералы для многострочных строк:
func main(){
multiline :=`line
by line
and line
after line`}
Необработанные строковые литералы
Необработанные строковые литералы являются символьными последовательностями между кавычками, как в `foo`. В кавычках может появляться любой символ, кроме обратной кавычки.
Значительная часть заключается в том, что необработанный литерал не просто многострочный, и быть многострочным - не единственная цель этого.
Значение необработанного строкового литерала - это строка, состоящая из неинтерпретированных (неявно кодированных в UTF-8) символов между кавычками; в частности, обратная косая черта не имеет особого значения ...
Таким образом, экранирование не будет интерпретироваться, и новые строки между галочками будут настоящими новыми линиями .
func main(){
multiline :=`line
by line \n
and line \n
after line`// \n will be just printed. // But new lines are there too.
fmt.Print(multiline)}
конкатенация
Возможно, у вас есть длинная линия, которую вы хотите разорвать, и вам не нужны новые строки в ней. В этом случае вы можете использовать конкатенацию строк.
func main(){
multiline :="line "+"by line "+"and line "+"after line"
fmt.Print(multiline)// No new lines here}
Так как "" интерпретируется, строковые литералы будут интерпретироваться.
func main(){
multiline :="line "+"by line \n"+"and line \n"+"after line"
fmt.Print(multiline)// New lines as interpreted \n}
Используя обратные галочки, вы можете иметь многострочные строки:
package main
import"fmt"
func main(){
message :=`This is a
Multi-line Text String
Because it uses the raw-string back ticks
instead of quotes.
`
fmt.Printf("%s", message)}
Вместо использования символов двойной кавычки («) или одинарных кавычек ('), вместо этого используйте обратные галочки для определения начала и конца строки. Затем вы можете обернуть его через строки.
Если вы сделаете отступ в строке, помните, что пробел будет учитываться.
Пожалуйста, проверьте игровую площадку и проведите эксперименты с ней.
Вы должны быть очень осторожны с форматированием и межстрочным интервалом в go, все имеет значение, и вот рабочий пример, попробуйте его https://play.golang.org/p/c0zeXKYlmF
package main
import"fmt"
func main(){
testLine :=`This is a test line 1
This is a test line 2`
fmt.Println(testLine)}
Ответы:
В соответствии со спецификацией языка вы можете использовать необработанный строковый литерал, где строка отделяется обратными кавычками вместо двойных кавычек.
источник
line 1
того, как он будет невидимым в вашем редакторе, но присутствует в строке.$(abcd)
).Ты можешь написать:
что так же, как:
В отличие от использования обратных тиков, он сохранит escape-символы. Обратите внимание, что «+» должен быть в «ведущей» строке, то есть:
генерирует ошибку.
источник
\n
и намного проще работать с динамическими строками и тому подобным. Если я прав, принятый ответ действительно для статических строк в коде, чтобы он выглядел красиво.Из строковых литералов :
\n
'.Но если ваша многострочная строка должна содержать обратную кавычку (`), вам придется использовать интерпретируемый строковый литерал:
Вы не можете напрямую поместить обратную цитату (`) в необработанный строковый литерал (` `xx
\
).Вы должны использовать (как объясняется в разделе « Как поместить обратную цитату в строку с обратной кавычкой? »):
источник
Используйте необработанные строковые литералы для многострочных строк:
Необработанные строковые литералы
Значительная часть заключается в том, что необработанный литерал не просто многострочный, и быть многострочным - не единственная цель этого.
Таким образом, экранирование не будет интерпретироваться, и новые строки между галочками будут настоящими новыми линиями .
конкатенация
Возможно, у вас есть длинная линия, которую вы хотите разорвать, и вам не нужны новые строки в ней. В этом случае вы можете использовать конкатенацию строк.
Так как "" интерпретируется, строковые литералы будут интерпретироваться.
источник
Go и многострочные строки
Используя обратные галочки, вы можете иметь многострочные строки:
Вместо использования символов двойной кавычки («) или одинарных кавычек ('), вместо этого используйте обратные галочки для определения начала и конца строки. Затем вы можете обернуть его через строки.
Пожалуйста, проверьте игровую площадку и проведите эксперименты с ней.
источник
Вы можете поместить контент с `` вокруг него, как
источник
Вы должны быть очень осторожны с форматированием и межстрочным интервалом в go, все имеет значение, и вот рабочий пример, попробуйте его https://play.golang.org/p/c0zeXKYlmF
источник
Вы можете использовать сырые литералы. пример
источник
Для меня это то, что я использую, если добавление
\n
не является проблемой.Еще вы можете использовать
raw string
источник