Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Apakah kaedah pengendalian pengecualian dalam bahasa Go?

Apakah kaedah pengendalian pengecualian dalam bahasa Go?

WBOY
WBOYasal
2023-06-09 20:10:521843semak imbas

Bahasa Go tidak menyokong mekanisme pengendalian pengecualian dalam erti kata tradisional, tetapi dalam bahasa Go, terdapat beberapa kaedah pengendalian ralat yang boleh digunakan untuk mengendalikan jenis ralat yang berbeza. Dalam artikel ini, kami akan memperkenalkan kaedah pengendalian pengecualian dalam bahasa Go.

  1. Nilai pulangan ralat

Dalam bahasa Go, jika nilai yang dikembalikan oleh fungsi ialah nilai jenis ralat, ini bermakna fungsi itu mungkin mempunyai beberapa jenis ralat. Apabila fungsi ini dipanggil, nilai ralat yang dikembalikan diperiksa untuk menentukan bagaimana program harus meneruskan pelaksanaan. Kaedah ini agak langsung dan mudah, dan merupakan kaedah pengendalian ralat utama dalam bahasa Go.

Contohnya:

func Divide(a, b int) (int, error) {
    if b == 0 {
        return 0, fmt.Errorf("can't divide by zero")
    }
    return a / b, nil
}

Seperti yang anda lihat, jika pembahagi ialah 0, fungsi akan mengembalikan nilai ralat. Apabila fungsi ini dipanggil, nilai pulangan diperiksa untuk melihat sama ada ralat telah berlaku Jika nilai ralat tidak sifar, atur cara melaksanakan kod pengendalian ralat yang sepadan.

result, err := Divide(5, 0)
if err != nil {
    log.Fatal(err)
}
  1. tunda/panik/pulihkan

Walaupun bahasa Go tidak mempunyai mekanisme pengendalian pengecualian dalam pengertian tradisional, ia menyediakan gabungan fungsi tangguh, panik dan pulih . Gabungan ini dipanggil mekanisme "tunda-panik-pemulihan".

  • menunggu: Fungsi ini memanggil pernyataan yang perlu dilaksanakan sebelum pelaksanaan fungsi semasa berakhir.
  • panik: Fungsi ini boleh menghentikan pelaksanaan program semasa dengan serta-merta. Dan mula menghantar nilai ralat kepada fungsi pulih pada tahap tertinggi dalam timbunan panggilan program. Apabila nilai ralat tidak dikendalikan, program akan ditamatkan.
  • pulih: Fungsi ini digunakan untuk menangkap nilai ralat yang diluluskan di bahagian bawah fungsi panik (), kemudian mengembalikan ralat dan menghentikan proses panik menamatkan program lebih awal.

Contohnya:

func Foo() {
    defer func() {
        if r := recover(); r != nil {
            log.Println("Recovered:", r)
        }
    }()
    panic("I'm panic!")
    fmt.Println("Continuing execution...")
}

Seperti yang anda lihat, panggilan fungsi panik ialah cara untuk menamatkan pelaksanaan program. Jika terdapat berbilang fungsi penangguhan, ia akan dilaksanakan dalam susunan FILO, jadi fungsi pulih harus diletakkan dalam fungsi penangguhan paling luar.

  1. Jenis ralat tersuai

Bahasa Go juga menyediakan cara untuk menyesuaikan jenis ralat. Apabila pengendalian ralat khusus yang lebih terperinci diperlukan, jenis ralat boleh disesuaikan.

Contoh:

type DivideError struct {
    dividend int
    divisor  int
}

func (de DivideError) Error() string {
    return fmt.Sprintf("can't divide %d by %d", de.dividend, de.divisor)
}

func Divide(a, b int) (int, error) {
    if b == 0 {
        return 0, DivideError{a, b}
    }
    return a / b, nil
}

Dalam contoh ini, kami mentakrifkan jenis ralat baharu DivideError . Jenis ini mengandungi pembahagi dan dividen. Jenis ini juga melaksanakan kaedah Ralat untuk mengembalikan mesej ralat. Dalam fungsi Divide kami, jika pembahagi ialah 0, jenis DivideError yang dimulakan dikembalikan.

result, err := Divide(5, 0)
if de, ok := err.(DivideError); ok {
    log.Fatalf("Error handled by application: %s
", de.Error())
} else if err != nil {
    log.Fatal(err)
}

Perlu diambil perhatian bahawa apabila menggunakan jenis tersuai sebagai ralat, anda perlu menggunakan penegasan jenis untuk penukaran jenis untuk mengendalikan jenis ralat tertentu.

Dalam artikel ini, kami memperkenalkan kaedah pengendalian pengecualian dalam bahasa Go, iaitu nilai pulangan ralat, mekanisme pemulihan-panik dan jenis ralat tersuai. Sudah tentu, dalam pembangunan sebenar, kaedah pengendalian pengecualian yang paling sesuai perlu dipilih mengikut situasi tertentu.

Atas ialah kandungan terperinci Apakah kaedah 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