Sebagai catatan: 'Kutipan mentah' seperti namanya, tidak menguraikan urutan pelarian. Oleh karena itu string literal pilihan untuk menulis pola ekspresi reguler karena biasanya berisi urutan pelarian non-standar yang akan membuat kompiler Go mengeluh tidak melarikan diri ganda. Itu membuat pola bersih dan relatif mudah dibaca.
Tepat
10
Perlu berhati-hati dengan ini saat menggunakan spasi endline. Misalnya jika Anda memberi spasi setelah line 1itu tidak akan terlihat di editor Anda tetapi ada dalam string.
Ory Band
2
@ DanieleleD Itu sedikit nonsequitur, tapi dialek yang mana? Agaknya terutama MySQL? stackoverflow.com/a/10574031 Perhatikan bahwa dengan memperluas argumen yang sama, akan menyulitkan untuk menyematkan penurunan harga, atau skrip shell (jika Anda memilih untuk menggunakan backtick sebagai ganti $(abcd)).
Ivan Vučica
8
@KyleHeuton: Agaknya Daniele D menggunakan karakter backtick dalam kueri SQL-nya (seperti yang sering dilakukan pengguna MySQL), dan merasa sulit untuk harus menyatakannya sebagai `+" "" + `dan memecah copy-and-pastability.
ruakh
1
Sisi buruknya adalah jika Anda menulisnya di dalam kode indentasi, tab akan dimasukkan dalam string, dan untuk menghilangkannya akan membuat kode Anda terlihat jelek. Dalam keadaan seperti itu saya lebih suka menggunakan jawaban Azeem
Lost Crotchet
111
Kamu bisa menulis:
"line 1"+"line 2"+"line 3"
yang sama dengan:
"line 1line 2line3"
Tidak seperti menggunakan kutu kembali, itu akan mempertahankan karakter melarikan diri. Perhatikan bahwa "+" harus berada di baris 'terkemuka' yaitu:
Solusi ini tidak analog dengan string multiline Python. Ini membagi string literal melalui beberapa baris, tetapi string itu sendiri tidak mengandung banyak baris.
Ben Butler-Cole
2
Karena ini mempertahankan karakter pelarian, baris baru dapat ditambahkan dengan mudah \ndan jauh lebih mudah untuk digunakan dengan string dinamis dan semacamnya. Jika saya benar, jawaban yang diterima benar-benar untuk string statis dalam kode agar terlihat cantik.
RisingSun
1
Bukankah itu juga sangat tidak efisien? Biarkan string menjadi 3x a 6 char sequence: 6 + 2 * 6 + 3 * 6 = 36 karakter dialokasikan ketika optimal akan menjadi 18 (karena string tidak dapat diubah, setiap kali Anda menambahkan dua string, string baru dibuat dengan panjang keduanya string digabungkan).
tanggal
@Tidak apa-apa: jika hanya ada string literal, tidak ada perbedaan runtime karena kompiler akan mengoptimalkan. Tetapi ada perbedaan kecil (mikrodetik, atau bahkan nanodetik) dalam waktu kompilasi.
dolmen
Saya percaya ini adalah cara terbaik untuk mendapatkan string multiline literal dengan ujung garis CRLF
literal string baku mendukung multiline (tetapi karakter yang lolos tidak ditafsirkan)
string yang diinterpretasikan secara literal menafsirkan karakter yang keluar, seperti ' \n'.
Tetapi, jika string multi-line Anda harus menyertakan backquote (`), maka Anda harus menggunakan string literal yang diartikan:
`line one
line two `+"`"+`line three
line four`
Anda tidak bisa secara langsung memasukkan tanda kutip mundur (`) dalam string string literal (` `xx \).
Anda harus menggunakan (seperti yang dijelaskan dalam " cara menempatkan backquote dalam string backquoted? "):
Gunakan literal string mentah untuk string multi-baris:
func main(){
multiline :=`line
by line
and line
after line`}
Literal string mentah
Literal string mentah adalah urutan karakter antara kutipan belakang, seperti pada `foo`. Dalam tanda kutip, setiap karakter dapat muncul kecuali kutipan kembali.
Bagian penting adalah bahwa literal mentah bukan hanya multi-line dan menjadi multi-line bukan satu-satunya tujuan dari itu.
Nilai dari string string literal adalah string yang terdiri dari karakter yang tidak diinterpretasi (tersirat UTF-8) antara kutipan; khususnya, garis miring terbalik tidak memiliki arti khusus ...
Jadi lolos tidak akan ditafsirkan dan baris baru antara kutu akan menjadi baris baru yang nyata .
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)}
Rangkaian
Mungkin Anda memiliki garis panjang yang ingin Anda hancurkan dan Anda tidak perlu garis baru di dalamnya. Dalam hal ini Anda bisa menggunakan penggabungan string.
func main(){
multiline :="line "+"by line "+"and line "+"after line"
fmt.Print(multiline)// No new lines here}
Karena "" ditafsirkan string, literal escape akan diinterpretasikan.
func main(){
multiline :="line "+"by line \n"+"and line \n"+"after line"
fmt.Print(multiline)// New lines as interpreted \n}
Menggunakan kutu belakang Anda dapat memiliki string multiline:
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)}
Alih-alih menggunakan tanda kutip ganda (“) atau simbol tanda kutip tunggal ('), alih-alih gunakan tanda centang kembali untuk menentukan awal dan akhir string. Anda kemudian dapat membungkusnya melintasi garis.
Jika Anda memasukkan indentasi string, ingat bahwa spasi putih akan dihitung.
Silakan periksa taman bermain dan lakukan percobaan dengannya.
Anda harus sangat berhati-hati dalam memformat dan mengatur spasi baris, semuanya penting dan ini adalah contoh yang berfungsi, cobalah 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)}
Jawaban:
Menurut spesifikasi bahasa, Anda dapat menggunakan string string literal, di mana string dibatasi oleh backticks bukan tanda kutip ganda.
sumber
line 1
itu tidak akan terlihat di editor Anda tetapi ada dalam string.$(abcd)
).Kamu bisa menulis:
yang sama dengan:
Tidak seperti menggunakan kutu kembali, itu akan mempertahankan karakter melarikan diri. Perhatikan bahwa "+" harus berada di baris 'terkemuka' yaitu:
menghasilkan kesalahan.
sumber
\n
dan jauh lebih mudah untuk digunakan dengan string dinamis dan semacamnya. Jika saya benar, jawaban yang diterima benar-benar untuk string statis dalam kode agar terlihat cantik.Dari String literals :
\n
'.Tetapi, jika string multi-line Anda harus menyertakan backquote (`), maka Anda harus menggunakan string literal yang diartikan:
Anda tidak bisa secara langsung memasukkan tanda kutip mundur (`) dalam string string literal (` `xx
\
).Anda harus menggunakan (seperti yang dijelaskan dalam " cara menempatkan backquote dalam string backquoted? "):
sumber
Gunakan literal string mentah untuk string multi-baris:
Literal string mentah
Bagian penting adalah bahwa literal mentah bukan hanya multi-line dan menjadi multi-line bukan satu-satunya tujuan dari itu.
Jadi lolos tidak akan ditafsirkan dan baris baru antara kutu akan menjadi baris baru yang nyata .
Rangkaian
Mungkin Anda memiliki garis panjang yang ingin Anda hancurkan dan Anda tidak perlu garis baru di dalamnya. Dalam hal ini Anda bisa menggunakan penggabungan string.
Karena "" ditafsirkan string, literal escape akan diinterpretasikan.
sumber
Pergi dan string multiline
Menggunakan kutu belakang Anda dapat memiliki string multiline:
Alih-alih menggunakan tanda kutip ganda (“) atau simbol tanda kutip tunggal ('), alih-alih gunakan tanda centang kembali untuk menentukan awal dan akhir string. Anda kemudian dapat membungkusnya melintasi garis.
Silakan periksa taman bermain dan lakukan percobaan dengannya.
sumber
Anda dapat menempatkan konten dengan `` di sekitarnya, seperti
sumber
Anda harus sangat berhati-hati dalam memformat dan mengatur spasi baris, semuanya penting dan ini adalah contoh yang berfungsi, cobalah https://play.golang.org/p/c0zeXKYlmF
sumber
Anda dapat menggunakan literal mentah. Contoh
sumber
Bagi saya ini yang saya gunakan jika menambahkan
\n
bukan masalah.Anda bisa menggunakan
raw string
sumber