Rumah pembangunan bahagian belakang Golang Ralat pengendalian dan mekanisme pengecualian dalam bahasa Go

Ralat pengendalian dan mekanisme pengecualian dalam bahasa Go

May 31, 2023 pm 10:21 PM
pergi bahasa Ralat pengendalian Mekanisme pengecualian

Bahasa Go ialah bahasa pengaturcaraan ringkas dan mudah dipelajari yang memfokuskan pada keteguhan kod dan pengendalian ralat. Dalam bahasa Go, pengendalian ralat dan mekanisme pengecualian adalah bahagian yang sangat penting. Artikel ini akan menyelidiki mekanisme pengendalian ralat dan pengecualian dalam bahasa Go, termasuk asas pengendalian ralat, jenis ralat, kaedah pengendalian ralat, serta mekanisme pengecualian bahasa Go dan cara mengendalikan pengecualian.

1. Asas pengendalian ralat

Dalam bahasa Go, ralat biasanya diwakili oleh jenis ralat. Jenis ralat ialah jenis antara muka yang telah ditetapkan Ia mempunyai kaedah Ralat yang mengembalikan rentetan yang menerangkan mesej ralat.

Dalam bahasa Go, apabila fungsi perlu mengembalikan ralat, ia biasanya mengembalikan nilai ralat jenis Jika tiada ralat, ia akan mengembalikan sifar. Contohnya:

func f() error {
   // some code
   if errorOccurred {
      return errors.New("some error occurred")
   }
   // continue
   return nil
}
Salin selepas log masuk

Dalam contoh di atas, jika ralat berlaku dalam fungsi f, nilai ralat jenis yang mengandungi maklumat ralat akan dikembalikan, jika tidak, tiada akan dikembalikan.

2. Jenis ralat

Jenis ralat dalam bahasa Go boleh menjadi sebarang jenis, tetapi jenis rentetan biasanya digunakan untuk mewakili maklumat ralat. Untuk memudahkan pengendalian ralat, pustaka bahasa Go menyediakan pakej ralat untuk mencipta dan memproses mesej ralat. Buat contoh ralat yang mengandungi maklumat ralat melalui ralat. Kaedah baharu, contohnya:

func div(a, b int) (int, error) {
   if b == 0 {
      return 0, errors.New("division by zero")
   }
   return a / b, nil
}
Salin selepas log masuk

Dalam kod di atas, fungsi div digunakan untuk melakukan pembahagian integer jika pembahagi ialah 0, jenis ralat yang mengandungi ralat maklumat dikembalikan nilai.

3. Kaedah pengendalian ralat

Terdapat tiga kaedah pengendalian ralat utama dalam bahasa Go:

  1. Nilai pulangan untuk menangkap ralat

Fungsi dan kaedah dalam bahasa Go biasanya mengembalikan nilai ralat jenis untuk menunjukkan sama ada fungsi atau kaedah itu berjaya dilaksanakan. Pemanggil boleh mengendalikan ralat dalam fungsi atau pelaksanaan kaedah melalui pengembalian ralat. Contohnya:

result, err := someFunction()
if err != nil {
   // handle error
}
Salin selepas log masuk
  1. Panik dan Pulih

Fungsi panik dalam bahasa Go digunakan untuk membuang pengecualian masa jalan. Jika panik berlaku, atur cara akan menghentikan pelaksanaan serta-merta, bingkai tindanan fungsi semasa akan muncul dan fungsi induk yang terus dilaksanakan akan terus dijalankan.

Fungsi pulih digunakan untuk menangkap pengecualian masa jalan yang disebabkan oleh panik dan membenarkan atur cara meneruskan pelaksanaan selepas pengecualian dikendalikan. Jika anda memanggil pulih dalam fungsi tangguh, anda boleh memulihkan pemandangan dan mengendalikannya apabila pengecualian berlaku dalam program. Contohnya:

func main() {
   defer func() {
      if r := recover(); r != nil {
         fmt.Println("Recovered from panic:", r)
      }
   }()
   panic("Panic occurred")
}
Salin selepas log masuk

Dalam kod di atas, apabila atur cara melaksanakan fungsi panik, pengecualian masa jalan akan dilemparkan, menyebabkan atur cara menghentikan pelaksanaan dan mengeluarkan mesej ralat. Tetapi dengan memanggil fungsi pulih dalam fungsi utama, kami boleh memulihkan pemandangan dan mengendalikannya apabila program melemparkan pengecualian.

  1. Log merekodkan ralat

Pakej log dalam bahasa Go menyediakan satu set fungsi untuk merakam maklumat dan ralat boleh dilog ke fail atau menara kawalan tertentu. Contohnya:

logger := log.New(os.Stderr, "LOG: ", log.Lshortfile)
logger.Println("Error message")
Salin selepas log masuk

Dalam kod di atas, kami mencipta pembalak baharu dan mencatat maklumat ralat menggunakan fungsi Println. Pakej log menyediakan banyak kaedah yang berbeza untuk maklumat log dan ralat. Menggunakan pakej log untuk log mesej ralat biasanya lebih mudah, tetapi tidak sefleksibel seperti mengembalikan nilai ralat dan menggunakan fungsi pulih.

4. Mekanisme dan pemprosesan pengecualian dalam bahasa Go

Dalam bahasa Go, pengecualian adalah berbeza daripada mekanisme pengecualian dalam bahasa pengaturcaraan tradisional, dan tidak menyediakan sintaks yang serupa dengan throw and catch. Walau bagaimanapun, dengan menggunakan mekanisme penyataan seperti tangguh dan pulih, penangkapan pengecualian dan pemprosesan yang serupa dengan struktur cuba-tangkap boleh dicapai.

Pernyataan tangguh digunakan untuk menentukan operasi yang perlu dilakukan apabila fungsi keluar. Memanggil fungsi tangguh dalam fungsi membolehkan program menangguhkan pelaksanaan penyataan tertentu sehingga penghujung fungsi, yang memudahkan untuk melaksanakan operasi seperti pelepasan sumber, semakan pengecualian dan pengiraan nilai pulangan.

Fungsi pulih digunakan untuk menangkap pengecualian masa jalan yang disebabkan oleh panik dan mengembalikan pengecualian yang menghentikan program. Sebelum memanggil pulih, anda perlu menggunakan fungsi tangguh untuk menangguhkan panggilan fungsi sehingga selepas program dilaksanakan. Contohnya:

func panicAndRecover() {
   defer func() {
      if r := recover(); r != nil {
         fmt.Println("Recovered from panic:", r)
      }
   }()
   panic("Panic occurred")
}
Salin selepas log masuk

Dalam kod di atas, kami memanggil fungsi panik untuk menaikkan pengecualian masa jalan dan menggunakan fungsi pulih di luarnya untuk menangkap maklumat pengecualian. Pernyataan penangguhan digunakan untuk menentukan operasi yang perlu dilakukan pada akhir fungsi, iaitu, untuk mengendalikan pengecualian Panic. Jika recover dipanggil pada bila-bila masa sebelum Panic dan ia mengembalikan nilai bukan nol, pelaksanaan akan diteruskan, jika tidak program akan berhenti. Jika tiada fungsi pulih di luar kod yang boleh menangkap pengecualian, program akan keluar.

5. Ringkasan

Artikel ini mengambil bahasa Go sebagai contoh untuk memperkenalkan kaedah pelaksanaan dan pemprosesan pengendalian ralat dan mekanisme pengecualian. Dalam bahasa Go, pengendalian ralat adalah sangat penting dan sangat mudah untuk dilaksanakan dan dikendalikan Ia biasanya melibatkan penciptaan maklumat ralat, definisi jenis ralat, pemprosesan nilai pulangan fungsi, dan penangkapan dan pengendalian pengecualian. Selain kaedah pemprosesan yang dinyatakan di atas, bahasa Go mempunyai kaedah pengendalian ralat lain, seperti menggunakan coroutine dan saluran paip bahasa Go untuk mengendalikan mesej ralat. Dalam proses pembangunan sebenar, adalah perlu untuk memilih kaedah pengendalian ralat yang sesuai berdasarkan keperluan sebenar dan senario perniagaan.

Atas ialah kandungan terperinci Ralat pengendalian dan mekanisme 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

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

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)

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 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 ...

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 ...

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 ...

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 ...

Apa yang perlu saya lakukan jika label struktur tersuai di Goland tidak dipaparkan? Apa yang perlu saya lakukan jika label struktur tersuai di Goland tidak dipaparkan? Apr 02, 2025 pm 05:09 PM

Apa yang perlu saya lakukan jika label struktur tersuai di Goland tidak dipaparkan? Apabila menggunakan Goland untuk Pembangunan Bahasa GO, banyak pemaju akan menghadapi tag struktur tersuai ...

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, ...

Apabila menggunakan sql.open, mengapa tidak melaporkan ralat apabila DSN berlalu kosong? Apabila menggunakan sql.open, mengapa tidak melaporkan ralat apabila DSN berlalu kosong? Apr 02, 2025 pm 12:54 PM

Apabila menggunakan SQL.Open, mengapa DSN tidak melaporkan ralat? Dalam bahasa Go, sql.open ...

See all articles