Rumah >pembangunan bahagian belakang >Golang >Penyahpepijatan pengoptimuman dan pengendalian pengecualian dalam bahasa Go
Sebagai bahasa pengaturcaraan moden, bahasa Go telah menunjukkan kelebihan yang kukuh dalam pelbagai senario. Walau bagaimanapun, menulis kod bebas ralat sepenuhnya adalah mustahil untuk pengaturcara terbaik sekalipun. Oleh itu, pengoptimuman penyahpepijatan dan pengendalian pengecualian memainkan peranan yang sangat penting dalam pembangunan bahasa Go. Dalam artikel ini, kami akan menyelidiki cara melakukan pengoptimuman penyahpepijatan dan pengendalian pengecualian dalam pembangunan bahasa Go.
1. Penyahpepijatan dan pengoptimuman
Penyahpepijatan dan pengoptimuman merujuk kepada proses menganalisis dan menyelesaikan masalah yang berlaku dalam program. Untuk bahasa Go, proses penyahpepijatan dan pengoptimuman biasanya dibahagikan kepada langkah-langkah berikut:
Kaedah penyahpepijatan yang paling mudah adalah dengan memasukkannya terus ke dalam kod Penyata cetakan mengeluarkan beberapa maklumat penting apabila program dijalankan untuk penjejakan dan analisis. Dalam bahasa Go, kita boleh menggunakan fungsi Println atau Printf dalam pakej fmt untuk mencapainya. Sebagai contoh, kita boleh memasukkan kod berikut ke dalam kod:
fmt.Println("Nilai semasa x ialah: ", x)
Dengan cara ini, x boleh dikeluarkan dalam konsol semasa nilai program dijalankan.
Selain mencetak pernyataan, kami juga boleh menggunakan penyahpepijat untuk nyahpepijat. Penyahpepijat untuk bahasa Go ialah gdb, yang membolehkan pengaturcara menjeda atur cara semasa ia berjalan, melihat nilai pembolehubah, menjalankan baris kod dan operasi lain. Langkah-langkah untuk menggunakan gdb untuk menyahpepijat program Go adalah seperti berikut:
(1) Gunakan bendera -g semasa menyusun
Sebelum menggunakan gdb untuk menyahpepijat program Go, program perlu disusun menggunakan bendera -g untuk mendayakan maklumat penyahpepijatan. Contohnya:
go build -gcflags "-N -l" -o main main.go
(2) Jalankan program
dalam direktori tempat sumber program kod terletak, Mulakan atur cara menggunakan arahan berikut:
gdb utama
(3) Tetapkan titik putus
Tetapkan titik putus menggunakan arahan gdb (jeda program berjalan pada baris kod itu dan benarkan pemeriksaan nilai pembolehubah). Sebagai contoh, tetapkan titik putus pada baris 10 kod:
(gdb) br 10
(4) Jalankan program
Masukkan arahan "run" untuk dijalankan program, dan program akan berhenti seketika pada titik putus yang ditetapkan.
(5) Perhatikan nilai pembolehubah
Masukkan arahan "p variable name" untuk melihat nilai pembolehubah. Sebagai contoh, masukkan "p x" untuk melihat nilai pembolehubah x.
(6) Teruskan berjalan
Masukkan arahan “teruskan” untuk terus menjalankan program.
pprof ialah alat analisis prestasi yang disertakan dengan bahasa Go Ia boleh mempersembahkan maklumat surih tindanan masa jalan secara grafik dan membantu pengaturcara mencari kesesakan. Langkah-langkah untuk menggunakan pprof adalah seperti berikut:
(1) Tambah import _ "net/http/pprof" dalam program
Tambah baris kod di atas ke fungsi main(), yang akan berada dalam Apabila program berjalan, mulakan pelayan HTTP dan dayakan pprof.
(2) Jalankan atur cara
Jalankan atur cara anda seperti biasa dan aksesnya pada mesin dengan penyemak imbas: http://localhost:6060/debug/pprof/
(3) Semak bottleneck yang sedang berjalan
Anda boleh menyemak bottleneck yang sedang berjalan (fungsi bottleneck) dan peruntukan memori dalam pprof.
2. Pengendalian pengecualian
Mekanisme pengendalian pengecualian bahasa Go menggunakan kaedah yang dipanggil "fungsi penangguhan" (tunda). Fungsi tertunda ialah fungsi yang sedang dilaksanakan sebelum fungsi tamat, dan fungsi tertunda dilaksanakan selepas panggilan fungsi tamat. Selain itu, bahasa Go juga menyediakan mekanisme "panik" untuk menemui dan melaporkan ralat masa jalan dalam kod. Kami akan memperkenalkan kedua-dua mekanisme ini secara berasingan.
Fungsi tertunda membolehkan pembangun mentakrifkan beberapa kod yang akan dipanggil sebelum fungsi kembali. Panggilan fungsi tertunda dipanggil dalam susunan terbalik definisinya. Apabila fungsi bahasa Go kembali, fungsi tunda yang berjaya didaftarkan ini dilaksanakan dalam susunan masuk dahulu, keluar terakhir (LIFO), contohnya:
func main() {
defer fmt.Println("In main") f()
}
func f() {
defer fmt.Println("In f") panic("Some error occurred!")
}
Dalam kod di atas, fungsi tanpa nama dilaksanakan sebelum ret keluar.
Apabila ralat berlaku dalam atur cara, ia akan membuang pengecualian semasa runtime. Pada masa ini, anda boleh menggunakan mekanisme panik bahasa Go untuk membatalkan program pelaksanaan dan mengembalikan mesej ralat. Dalam bahasa Go, kita boleh menggunakan fungsi panik untuk mencetuskan keadaan panik. Contohnya:
func f() {
defer func() { if r := recover(); r != nil { fmt.Println("Recovered in f", r) } }() fmt.Println("Before panic") panic("Some error occurred!") fmt.Println("After panic") // 这一行不会被执行
}
Dalam kod di atas, fungsi panik membuang pengecualian, menyebabkan kod berikut tidak dapat dilaksanakan. Walau bagaimanapun, dalam kes ini, kita boleh menggunakan fungsi pulih untuk menangkap dan memulihkan kawalan program. Penggunaan biasa fungsi pulih adalah untuk memulihkan kawalan program dalam penangguhan dan log mesej ralat.
Kesimpulan:
Dalam artikel ini, kami mempunyai perbincangan mendalam tentang kaedah dan mekanisme untuk pengoptimuman penyahpepijatan dan pengendalian pengecualian dalam pembangunan bahasa Go. Teknologi dan alatan ini akan membantu pengaturcara dengan cepat mendiagnosis dan menyelesaikan masalah dalam program serta meningkatkan kebolehpercayaan dan kebolehgunaan program. Kami percaya bahawa teknologi dan alatan ini akan memainkan peranan penting dalam proses pembangunan bahasa Go harian.
Atas ialah kandungan terperinci Penyahpepijatan pengoptimuman dan pengendalian pengecualian dalam bahasa Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!