Rumah >pembangunan bahagian belakang >Golang >Penyahpepijatan pengoptimuman dan pengendalian pengecualian dalam bahasa Go

Penyahpepijatan pengoptimuman dan pengendalian pengecualian dalam bahasa Go

WBOY
WBOYasal
2023-06-01 08:41:08818semak imbas

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:

  1. Gunakan pernyataan cetakan

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.

  1. Menggunakan penyahpepijat

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.

  1. Gunakan pprof

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.

  1. mekanisme tangguh

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.

  1. mekanisme panik

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn