Dalam beberapa tahun kebelakangan ini, dengan perkembangan berterusan dan populariti industri Internet, bahasa pengaturcaraan telah menjadi semakin penting. Di antara banyak bahasa pengaturcaraan, Golang digemari oleh pembangun kerana kelebihan prestasinya yang pantas, cekap dan selamat.
Walaupun Golang mempunyai prestasi yang cekap, ia juga menghadapi pelbagai masalah dan cabaran. Salah satu masalah biasa ialah watak melarikan diri di Golang, terutamanya watak melarikan diri "%".
Di Golang, jika anda perlu menggunakan aksara melarikan diri "%", anda perlu mengulanginya dua kali, iaitu, "%%" Ini kerana di Golang, tanda peratus "%" itu sendiri a Watak melarikan diri. Oleh itu, apabila Golang mengendalikan rentetan yang mengandungi tanda peratus "%", ia akan menganggapnya sebagai rentetan format dan menghuraikan parameter yang mengikutinya sebagai parameter format.
Sebagai contoh, jika anda perlu mencetak rentetan "10%" dalam Golang, anda perlu menulisnya sebagai "fmt.Printf("10%%")". Di sini, tanda peratus pertama "%" mewakili watak melarikan diri, dan tanda peratus kedua "%" mewakili tanda peratus sebenar yang akan dikeluarkan.
Jika anda terus menulis "fmt.Printf("10%"), Golang akan berfikir bahawa anda ingin memformat output dan akan mencari parameter berikut untuk output, jadi hasil yang salah akan muncul. Ini kerana Golang akan menghuraikan aksara selepas tanda peratus "%" sebagai sebahagian daripada rentetan terformat tanpa mengendalikan tanda peratus itu sendiri dengan betul.
Sama seperti masalah ini, terdapat satu lagi ralat biasa - masalah tanda peratus semasa mengekod URL. Dalam permintaan HTTP, tanda peratus dalam URL biasanya mewakili aksara melarikan diri, menukar beberapa aksara atau bait khas kepada beberapa rentetan yang dikodkan khas. Contohnya, %20 mewakili ruang dan %3A mewakili titik bertindih.
Di Golang, anda juga menghadapi masalah tanda peratus apabila pengekodan URL. Jika anda menggunakan fungsi pengekodan URL Golang sendiri untuk pengekodan, anda juga perlu memberi perhatian untuk melepaskan tanda peratus. Contohnya, gunakan fungsi Encode dalam "net/url" untuk mengekod rentetan dalam Golang:
import "net/url" encodeStr := url.QueryEscape("http://www.baidu.com/?query=测试&name=百度") fmt.Println(encodeStr) // 输出:http%3A%2F%2Fwww.baidu.com%2F%3Fquery%3D%E6%B5%8B%E8%AF%95%26name%3D%E7%99%BE%E5%BA%A6
Seperti yang anda lihat, Golang melarikan diri daripada semua aksara khas dalam parameter dan menggunakan Tanda peratus mengekodnya.
Walau bagaimanapun, jika anda ingin memperkenalkan aksara melarikan diri tersuai, seperti tanda peratus "%" yang dinyatakan sebelum ini, Golang akan menyebabkan ralat penyahkodan. Sebagai contoh, kod berikut akan menyebabkan ralat:
import "net/url" encodeStr := url.QueryEscape("http://www.baidu.com/?query=测试&name=10%") fmt.Println(encodeStr) // 输出:http%3A%2F%2Fwww.baidu.com%2F%3Fquery%3D%E6%B5%8B%E8%AF%95%26name%3D10
Seperti yang anda lihat, hanya "10" yang tinggal dalam "10%" dalam hasil pengekodan dan aksara akan hilang semasa penyahkodan, dengan itu Menyebabkan ralat program.
Dalam kes ini, penyelesaiannya juga sangat mudah, cuma gantikan watak yang perlu dilepaskan dengan watak lain. Sebagai contoh, gantikan tanda peratus "%" dengan "%25" (pengekodan URL bagi tanda peratus):
import "net/url" import "strings" encodeStr := url.QueryEscape(strings.Replace("http://www.baidu.com/?query=测试&name=10%", "%", "%25", -1)) fmt.Println(encodeStr) // 输出:http%3A%2F%2Fwww.baidu.com%2F%3Fquery%3D%E6%B5%8B%E8%AF%95%26name%3D10%25
Dengan cara ini, hasil pengekodan akan dinyahkod dengan betul.
Secara umumnya, watak melarikan diri "%" dalam Golang memerlukan perhatian khusus dan perlu diulang dua kali untuk menggunakannya dengan betul. Apabila mengekod URL, jika anda perlu menggunakan tanda peratus untuk melarikan diri, pemprosesan khas diperlukan untuk mengelakkan ralat penyahkodan. Hanya dengan cara ini kami boleh menggunakan sepenuhnya kelebihan Golang, mengelakkan ralat yang tidak dijangka dan menjadikan kod kami lebih mantap dan cekap.
Atas ialah kandungan terperinci Bagaimana untuk melarikan diri % dalam golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!