Jak pisać ciągi Wielowierszowe w Go?
Czy Go ma coś podobnego do ciągów wielowierszowych Pythona:
"""line 1
line 2
line 3"""
Jeśli nie, jaki jest preferowany sposób pisania łańcuchów obejmujących wiele linii?
7 answers
Zgodnie ze specyfikacją języka można użyć surowego ciągu znaków, gdzie łańcuch jest oddzielany za pomocą backticks zamiast podwójnych cudzysłowów.
`line 1
line 2
line 3`
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-01 10:43:17
Możesz napisać:
"line 1" +
"line 2" +
"line 3"
Czyli to samo co:
"line 1line 2line3"
W przeciwieństwie do używania tylnych kleszczy, zachowuje znaki ucieczki. Zauważ, że " + "musi znajdować się w linii' wiodącej', tj.:
"line 1"
+"line 2"
Generuje błąd.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-26 06:26:54
From string literals :
- surowy ciąg znaków obsługuje wiele linii (ale znaki z klauzulą odstępu nie są interpretowane)
- interpretowany ciąg znaków literalnie interpretuje znaki ucieczki, takie jak "
\n
".
Ale jeśli twój łańcuch wielowierszowy musi zawierać backquote ( ` ), to będziesz musiał użyć interpretowanego literału łańcuchowego:
`line one
line two ` +
"`" + `line three
line four`
Nie można bezpośrednio umieścić backquote (`) w surowym łańcuchu znaków ("xx \
).
Musisz użyć (jak wyjaśniono w "Jak umieścić backquote w backquoted string?"):
+ "`" + ...
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:26
Użyj nieprzetworzonych liter ciągów dla ciągów wielowierszowych:
func main(){
multiline := `line
by line
and line
after line`
}
Surowe literały ciągów
Surowe literały łańcuchowe są sekwencjami znaków pomiędzy tylnymi cudzysłowami, jak w
foo
. W cudzysłowach może pojawić się dowolny znak, z wyjątkiem back quote.
Znaczącą częścią jest to, że jest surowy literalny, a nie tylko wielowierszowy i być wielowierszowym nie jest jedynym celem tego.
Wartość surowego ciągu literalnego jest ciągiem składającym się z nieprzetworzonego znaki między cudzysłowami (w domyśle kodowane UTF-8); w szczególności ukośniki zwrotne nie mają specjalnego znaczenia...
Więc ucieczki nie będą interpretowane, a nowe linie między kleszczami będą nowymi liniami.
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)
}
Konkatenacja
Prawdopodobnie masz długą linię, którą chcesz złamać i nie potrzebujesz w niej nowych linii. W tym przypadku można użyć konkatenacji łańcuchów.
func main(){
multiline := "line " +
"by line " +
"and line " +
"after line"
fmt.Print(multiline) // No new lines here
}
Ponieważ "" jest interpretowany literalny ciąg znaków będzie interpretowane.
func main(){
multiline := "line " +
"by line \n" +
"and line \n" +
"after line"
fmt.Print(multiline) // New lines as interpreted \n
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-07 07:15:58
Możesz umieścić treść z ` wokół niego, jak
var hi = `I am here,
hello,
`
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-24 01:50:54
Musisz być bardzo ostrożny przy formatowaniu i odstępach między wierszami w go, wszystko się liczy i oto próbka robocza, spróbuj 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)
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-29 23:17:37
Możesz używać surowych liter. Przykład
s:=`stack
overflow`
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-24 08:41:34