Есть ли в Go что-нибудь похожее на многострочные строки Python:
"""line 1
line 2
line 3"""
Если нет, то какой способ записи строк занимает несколько строк?
Есть ли в Go что-нибудь похожее на многострочные строки Python:
"""line 1
line 2
line 3"""
Если нет, то какой способ записи строк занимает несколько строк?
В соответствии с спецификацией языка вы можете использовать строковый строковый литерал, где строка разделяется обратными выводами вместо двойных кавычек.
`line 1
line 2
line 3`
Ты можешь написать:
"line 1" +
"line 2" +
"line 3"
что так же, как:
"line 1line 2line3"
В отличие от использования обратных тиков, он сохранит escape-символы. Обратите внимание, что "+" должен быть в "ведущей" строке, то есть:
"line 1"
+"line 2"
генерирует ошибку.
\n
'.Но если ваша многострочная строка должна содержать обратную кавычку ('), вам придется использовать интерпретируемый строковый литерал:
'line one
line two ' +
"'" + 'line three
line four'
Вы не можете напрямую поместить обратную цитату (') в необработанный строковый литерал (' 'xx \
).
Вы должны использовать (как объясняется в разделе " Как поместить обратную цитату в строку с обратной кавычкой? "):
+ "'" + ...
Используйте необработанные строковые литералы для многострочных строк:
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)
}
Вместо использования символов двойной кавычки (") или одинарных кавычек ('), вместо этого используйте обратные галочки, чтобы определить начало и конец строки. Затем можно обернуть ее между строками.
Если вы сделаете отступ в строке, помните, что пробел будет учитываться.
Пожалуйста, проверьте игровую площадку и проведите эксперименты с ней.
Вы можете поместить содержимое с `` вокруг него, например
var hi = `I am here,
hello,
`
Вы должны быть очень осторожны при форматировании и межстрочном интервалах в 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)
}
Вы можете использовать сырые литералы. пример
s:='stack
overflow'
Для меня это то, что я использую, если добавление \n
не является проблемой.
fmt.Sprintf("Hello World\nHow are you doing today\nHope all is well with your go\nAnd code")
Иначе вы можете использовать raw string
multiline := 'Hello Brothers and sisters of the Code
The grail needs us.
'
sql := 'SELECT a.id, COALESCE(a.user_id) as user_id, COALESCE(u.username) as username, COALESCE(a.category_id) as category_id,
COALESCE(ca.label) AS category_label, COALESCE(ca.name) AS category_name, COALESCE(a.name) AS advertiser_name,
COALESCE(a.domain) as domain, COALESCE(a.click_through_url) as click_through_url, COALESCE(a.icon_url) as icon_url,
COALESCE(a.created_at) as created_at, COALESCE(a.status) as status, count(c.id) as campaign_count
FROM advertisers a
INNER JOIN users u ON (u.id = a.user_id AND u.id = %v AND u.status = 1)
INNER JOIN categories_iab ca ON (ca.id = a.category_id AND ca.status = 1)
LEFT JOIN campaigns c ON a.id = c.advertiser_id
GROUP BY a.id'
text := fmt.Sprintf("CALL paginator(\"%s\", %d, %d, \"detailed\")", sql, 4, 5)
fmt.Println(text)
Я получаю следующее
CALL paginator ("ВЫБЕРИТЕ a.id, COALESCE (a.user_id) в качестве user_id, COALESCE (u.username) в качестве имени пользователя, COALESCE (a.category_id) в качестве category_id, COALESCE (ca.label) в качестве category_label, COALESCE (ca.name") ) AS category_name, COALESCE (a.name) AS рекламодателя_name, COALE SCE (a.domain) в качестве домена, COALESCE (a.click_through_url) в качестве click_through_url, COALESCE (a.icon_url) в качестве icon_url, COALESCE (a.created_at) в качестве созданного_at, COALESCE (a.status) в качестве статуса, считать (c.id) как кампания_count ОТ рекламодателей ВНУТРЕННИХ РЕЙТИНГОВ пользователей u ВКЛ (u.id = a.user_id AND u.id =% v AND u.status = 1) ВНУТРЕННЕЕ СОЕДИНЕНИЕ ca ON (ca.id = a.category_id AND ca.status = 1) ЛЕВЫЕ ПРИСОЕДИНЯЕТСЯ Кампании c ON a.id = c.advertiser_id GROUP BY a.id ", 4, 5," подробный ")
КЛЮЧЕВОЕ СЛОВО разбито на 2 строки!