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

Penyahpepijatan pengoptimuman dan pengendalian pengecualian dalam bahasa Go

Jun 01, 2023 am 08:41 AM
pergi bahasa Pengendalian pengecualian Pengoptimuman nyahpepijat

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()
Salin selepas log masuk

}

func f() {

defer fmt.Println("In f")
panic("Some error occurred!")
Salin selepas log masuk

}

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") // 这一行不会被执行
Salin selepas log masuk

}

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 Laman Web ini
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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimanakah anda mengendalikan pengecualian dengan berkesan dalam PHP (cuba, menangkap, akhirnya, membuang)? Bagaimanakah anda mengendalikan pengecualian dengan berkesan dalam PHP (cuba, menangkap, akhirnya, membuang)? Apr 05, 2025 am 12:03 AM

Dalam PHP, pengendalian pengecualian dicapai melalui percubaan, menangkap, akhirnya, dan membuang kata kunci. 1) blok percubaan mengelilingi kod yang boleh membuang pengecualian; 2) Blok tangkapan mengendalikan pengecualian; 3) Akhirnya Blok memastikan bahawa kod itu sentiasa dilaksanakan; 4) Lemparan digunakan untuk membuang pengecualian secara manual. Mekanisme ini membantu meningkatkan keteguhan dan mengekalkan kod anda.

Perpustakaan apa yang digunakan untuk operasi nombor terapung di GO? Perpustakaan apa yang digunakan untuk operasi nombor terapung di GO? Apr 02, 2025 pm 02:06 PM

Perpustakaan yang digunakan untuk operasi nombor terapung dalam bahasa Go memperkenalkan cara memastikan ketepatannya ...

Apakah masalah dengan thread giliran di crawler colly go? Apakah masalah dengan thread giliran di crawler colly go? Apr 02, 2025 pm 02:09 PM

Masalah Threading Giliran di GO Crawler Colly meneroka masalah menggunakan Perpustakaan Colly Crawler dalam bahasa Go, pemaju sering menghadapi masalah dengan benang dan permintaan beratur. � ...

Perpustakaan mana yang dibangunkan oleh syarikat besar atau disediakan oleh projek sumber terbuka yang terkenal? Perpustakaan mana yang dibangunkan oleh syarikat besar atau disediakan oleh projek sumber terbuka yang terkenal? Apr 02, 2025 pm 04:12 PM

Perpustakaan mana yang dibangunkan oleh syarikat besar atau projek sumber terbuka yang terkenal? Semasa pengaturcaraan di GO, pemaju sering menghadapi beberapa keperluan biasa, ...

Apakah perbezaan antara struktur definisi kata kunci `var` dan` type` dalam bahasa Go? Apakah perbezaan antara struktur definisi kata kunci `var` dan` type` dalam bahasa Go? Apr 02, 2025 pm 12:57 PM

Dua cara untuk menentukan struktur dalam bahasa Go: perbezaan antara VAR dan jenis kata kunci. Apabila menentukan struktur, pergi bahasa sering melihat dua cara menulis yang berbeza: pertama ...

Bagaimana menyelesaikan masalah penukaran jenis user_id semasa menggunakan aliran redis untuk melaksanakan beratur mesej dalam bahasa Go? Bagaimana menyelesaikan masalah penukaran jenis user_id semasa menggunakan aliran redis untuk melaksanakan beratur mesej dalam bahasa Go? Apr 02, 2025 pm 04:54 PM

Masalah menggunakan redisstream untuk melaksanakan beratur mesej dalam bahasa Go menggunakan bahasa Go dan redis ...

Di Go, mengapa rentetan percetakan dengan fungsi println dan rentetan () mempunyai kesan yang berbeza? Di Go, mengapa rentetan percetakan dengan fungsi println dan rentetan () mempunyai kesan yang berbeza? Apr 02, 2025 pm 02:03 PM

Perbezaan antara percetakan rentetan dalam bahasa Go: perbezaan kesan menggunakan fungsi println dan rentetan () sedang ...

Kenapa perlu lulus petunjuk apabila menggunakan perpustakaan Go dan Viper? Kenapa perlu lulus petunjuk apabila menggunakan perpustakaan Go dan Viper? Apr 02, 2025 pm 04:00 PM

GO Pointer Syntax dan menangani masalah dalam penggunaan perpustakaan Viper semasa pengaturcaraan dalam bahasa Go, adalah penting untuk memahami sintaks dan penggunaan petunjuk, terutama dalam ...

See all articles