Bahasa Go ialah bahasa pengaturcaraan yang pantas, ringkas dan selamat Matlamat reka bentuknya adalah untuk meningkatkan kecekapan pengaturcaraan dan mengurangkan beban sistem. Walau bagaimanapun, walaupun bahasa pengaturcaraan terbaik tidak terlepas daripada ralat biasa. Dalam artikel ini, kami akan meneroka beberapa kesilapan biasa dalam bahasa Go dan cara mengelakkannya.
Bahasa Go tidak menyokong rujukan penuding nol. Percubaan untuk mengakses penuding nol mengakibatkan ralat masa jalan. Untuk mengelakkan ralat ini, kita perlu sentiasa menyemak sama ada penuding adalah batal sebelum menggunakannya. Kod sampel adalah seperti berikut:
var p *int if p != nil { fmt.Println(*p) }
Untuk tatasusunan, bahasa Go tidak menyemak sama ada indeks tatasusunan berada di luar sempadan . Oleh itu, mengakses elemen yang tidak wujud dalam tatasusunan boleh menyebabkan program ranap. Untuk mengelakkan situasi ini, kita perlu memastikan bahawa nilai indeks berada dalam julat panjang tatasusunan. Kod sampel adalah seperti berikut:
var a [5]int if i >= 0 && i < len(a) { fmt.Println(a[i]) }
Dalam bahasa Go, parameter fungsi dihantar mengikut nilai. Ini bermakna apabila kita melepasi struktur atau tatasusunan sebagai parameter, apa yang sebenarnya diluluskan ialah salinan struktur atau tatasusunan. Jika kita perlu mengubah suai data asal, kita mesti menghantar penunjuk kepada data asal. Kod sampel adalah seperti berikut:
func modifySlice(a []int) { a[0] = 100 } func main() { s := []int{1, 2, 3} modifySlice(s) fmt.Println(s[0]) // 输出 100 }
Pembolehubah tidak dimulakan mengandungi nilai yang tidak ditentukan. Jika kita cuba menggunakan pembolehubah yang tidak dimulakan, ralat kompilasi akan dilemparkan. Oleh itu, kita harus sentiasa memulakan pembolehubah sebelum menggunakannya. Kod sampel adalah seperti berikut:
var s string s = "hello" fmt.Println(s)
Dalam pengaturcaraan berbilang benang, pembolehubah yang dikongsi boleh membawa kepada keadaan perlumbaan. Bahasa Go menyediakan mekanisme seperti paip dan kunci mutex untuk mengelakkan konflik berbilang benang. Oleh itu, apabila kita menulis atur cara serentak, kita harus sentiasa mempertimbangkan untuk melindungi pembolehubah yang dikongsi. Kod sampel adalah seperti berikut:
var count int mutex := sync.Mutex{} func increment() { mutex.Lock() count++ mutex.Unlock() } func main() { for i := 0; i < 1000; i++ { go increment() } time.Sleep(time.Second) fmt.Println(count) }
Ringkasnya, ralat biasa dalam bahasa Go termasuk rujukan penuding nol, akses luar sempadan tatasusunan, hantaran parameter fungsi, pembolehubah tidak dimulakan dan akses serentak kepada pembolehubah dikongsi. Untuk mengelakkan kesilapan biasa ini, kita perlu memikirkan masalah dengan teliti sebelum menulis kod dan menggunakan kaedah yang betul untuk menanganinya.
Atas ialah kandungan terperinci Apakah kesilapan biasa dalam bahasa Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!