Odpowiedzi:
Zgodnie ze specyfikacją języka można użyć dosłownego ciągu literowego, w którym ciąg jest rozdzielany znakami odwrotnymi zamiast podwójnych cudzysłowów.
`line 1
line 2
line 3`
line 1
nim spację , będzie ona niewidoczna w edytorze, ale obecna w ciągu.
$(abcd)
).
Możesz pisać:
"line 1" +
"line 2" +
"line 3"
który jest taki sam jak:
"line 1line 2line3"
W przeciwieństwie do używania tyknięć, zachowa znaki ucieczki. Pamiętaj, że znak „+” musi znajdować się w wierszu „wiodącym”, tzn .:
"line 1"
+"line 2"
generuje błąd.
\n
i jest o wiele łatwiej pracować z ciągami dynamicznymi itp. Jeśli mam rację, zaakceptowana odpowiedź naprawdę dotyczy statycznych ciągów znaków w kodzie, aby wyglądały ładnie.
\n
”.Ale jeśli ciąg składający się z wielu wierszy musi zawierać cudzysłów (`), wówczas będziesz musiał użyć interpretowanego literału ciągu:
`line one
line two ` +
"`" + `line three
line four`
Nie można bezpośrednio wstawić cudzysłowu (`) w dosłownym łańcuchu literalnym (` `xx \
).
Musisz użyć (jak wyjaśniono w „ jak wstawić cudzysłów w ciągu cudzysłowów? ”):
+ "`" + ...
Użyj ciągów literalnych nieprzetworzonych dla ciągów wieloliniowych:
func main(){
multiline := `line
by line
and line
after line`
}
Nieprzetworzone literały łańcuchowe to sekwencje znaków między tylnymi cudzysłowami, jak w
`foo`
. W cudzysłowie może występować dowolny znak z wyjątkiem cudzysłowu.
Znaczna część jest to, że jest surowy dosłowny nie tylko multi-line i być multi-line nie jest jedynym celem tego.
Wartość literału łańcucha surowego jest łańcuchem złożonym z niezinterpretowanych (domyślnie zakodowanych w UTF-8) znaków między cudzysłowami; w szczególności ukośniki odwrotne nie mają specjalnego znaczenia ...
Dlatego znaki ucieczki nie będą interpretowane, a nowe linie między tykami będą prawdziwymi 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)
}
Być może masz długą linię, którą chcesz przełamać i nie potrzebujesz w niej nowych linii. W takim przypadku możesz użyć konkatenacji ciągów.
func main(){
multiline := "line " +
"by line " +
"and line " +
"after line"
fmt.Print(multiline) // No new lines here
}
Ponieważ interpretowane jest „”, interpretowane będą dosłowne znaki dosłowne.
func main(){
multiline := "line " +
"by line \n" +
"and line \n" +
"after line"
fmt.Print(multiline) // New lines as interpreted \n
}
Za pomocą tyknięć możesz mieć wieloliniowe łańcuchy:
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)
}
Zamiast używać symboli podwójnego cudzysłowu („) lub pojedynczego cudzysłowu ('), zamiast tego użyj znaku cofania, aby zdefiniować początek i koniec łańcucha. Następnie możesz zawinąć go w linie.
Jeśli jednak wcinasz ciąg znaków, pamiętaj, że białe znaki będą się liczyć.
Proszę sprawdzić plac zabaw i eksperymentuj z nim.
Musisz bardzo uważać na formatowanie i odstępy między wierszami w go, wszystko się liczy, a oto działająca próbka, 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)
}
możesz używać surowych literałów. Przykład
s:=`stack
overflow`
Dla mnie tego właśnie używam, jeśli dodawanie \n
nie stanowi problemu.
fmt.Sprintf("Hello World\nHow are you doing today\nHope all is well with your go\nAnd code")
W przeciwnym razie możesz użyć raw string
multiline := `Hello Brothers and sisters of the Code
The grail needs us.
`