Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara golang mengendalikan ralat dan pengecualian

Cara golang mengendalikan ralat dan pengecualian

PHPz
PHPzasal
2023-04-11 10:39:12862semak imbas

Golang ialah bahasa yang ditaip secara statik dengan mekanisme pengendalian pengecualian yang berkuasa, tetapi setiap pengaturcara berkemungkinan menghadapi ralat dan pengecualian. Artikel ini akan meneroka cara mengendalikan ralat dan pengecualian di Golang dan memperkenalkan beberapa amalan terbaik.

Ralat dan Panik

Di Golang, ralat dan pengecualian ialah dua konsep yang berbeza. Ralat selalunya boleh diramal, situasi biasa atau operasi yang gagal, seperti membuka fail yang tidak wujud atau sambungan rangkaian yang gagal. Sebaliknya, pengecualian biasanya tidak terkawal, keadaan ralat tidak diketahui, seperti ranap program akibat limpahan memori.

Golang mempunyai mekanisme untuk kedua-dua situasi: pengendalian ralat dan pengendalian pengecualian. Apabila ralat berlaku, Golang akan mengembalikan jenis ralat. Apabila pengecualian berlaku, program akan ranap dan panik. Ini menyediakan beberapa cara yang berkesan untuk mengendalikan ralat dan pengecualian.

Pengendalian ralat Golang

Pengendalian ralat di Golang adalah berdasarkan antara muka ralat jenis, yang boleh didapati dalam dokumentasi pakej. Jenis yang melaksanakan antara muka ini mewakili ralat, biasanya rentetan yang menerangkan punca ralat. Apabila fungsi mengembalikan ralat, anda mesti menyemak sama ada ralat adalah sifar. Jika ya, operasi berjaya, jika tidak, operasi gagal dan ralat dikembalikan.

Mari kita lihat contoh mudah menggunakan pengendalian ralat Golang:

package main

import (
    "errors"
    "fmt"
)

func divide(dividend, divisor int) (int, error) {
    if divisor == 0 {
        return 0, errors.New("division by zero")
    }
    return dividend / divisor, nil
}

func main() {
    result, err := divide(10, 0)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(result)
}

akan mengeluarkan hasil: division by zero

Dalam contoh di atas, kami menentukan fungsi A divide yang menerima dua integer. Jika pembahagi adalah sifar, fungsi mengembalikan ralat. Fungsi main menyemak sama ada operasi berjaya dengan menyemak nilai ralat fungsi divide dan mencetak mesej ralat jika operasi gagal.

Pengendalian pengecualian Golang

Selain pengendalian ralat, Golang juga mempunyai pengendalian pengecualian. Pengendalian pengecualian biasanya digunakan untuk mengendalikan ralat yang tidak dapat diramalkan semasa pengekodan, seperti Panik kerana kekurangan ingatan.

Mekanisme pengendalian pengecualian Golang dilaksanakan melalui fungsi terbina dalam panic() dan recover(). Apabila program memanggil fungsi panik(), program akan ranap dan mencetak mesej ralat dan surih tindanan. Jika fungsi recover() dipanggil dalam blok pernyataan tangguh, panik akan ditangkap dan program akan terus dilaksanakan.

Mari kita gunakan contoh mudah untuk menggambarkan penggunaan panik dan pulih:

package main

import "fmt"

func myFunc() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Recovered in myFunc", r)
        }
    }()
    fmt.Println("Calling Panic")
    panic("PANIC")
    fmt.Println("Returned from myFunc")
}

func main() {
    fmt.Println("Calling myFunc")
    myFunc()
    fmt.Println("Returned from myFunc")
}

Hasil keluarannya ialah:

Calling myFunc
Calling Panic
Recovered in myFunc PANIC
Returned from myFunc

Dalam contoh di atas, kita define Fungsi myFunc dicipta, yang akan memanggil fungsi panik dan mencetuskan panik. Dalam fungsi myFunc, kami menggunakan blok pernyataan tangguh untuk memanggil fungsi recover, yang akan menangkap pengecualian dan menggunakannya apabila kawalan kembali kepada proses semasa. Panik dan pulih biasanya digunakan untuk mengendalikan kod rollback dan pemulihan, tetapi tidak disyorkan untuk menggunakan panic() dan recover() dalam keadaan biasa.

Amalan Terbaik Golang

Berikut ialah beberapa amalan terbaik untuk pengendalian ralat dan pengendalian pengecualian di Golang:

  • Huraikan dengan terperinci seperti kemungkinan kesilapan.
  • Adalah lebih baik menggunakan ralat dan bukannya pengecualian dalam Golang. Go direka untuk mengendalikan keadaan ralat tanpa memerlukan pengecualian.
  • Gunakan pakej fmt untuk mengeluarkan ralat dalam pengendalian ralat, supaya lebih banyak maklumat berguna boleh dikeluarkan.
  • Gunakan tupel untuk mengembalikan ralat apabila boleh.
  • Berikan nama ralat yang bermakna.

Kesimpulan

Di Golang, ralat dan pengendalian pengecualian adalah aspek utama yang perlu ditangani oleh mana-mana pembangun. Dalam artikel ini, kami meneroka perbezaan antara ralat dan pengecualian, dan memperkenalkan ralat dan mekanisme pengendalian pengecualian yang paling biasa digunakan di Golang. Pengetahuan ini akan membantu anda menulis kod yang boleh diselenggara dan meminimumkan kemungkinan ralat.

Atas ialah kandungan terperinci Cara golang mengendalikan ralat dan pengecualian. 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