Amalan terbaik untuk pengendalian pengecualian dalam fungsi golang

王林
Lepaskan: 2024-04-26 17:42:01
asal
785 orang telah melayarinya

Amalan terbaik untuk mengendalikan pengecualian fungsi dalam Go ialah mengelak daripada menggunakan panik dan sebaliknya mengembalikan objek ralat untuk memberikan maklumat yang lebih terperinci. Gunakan tangguh dan pulihkan untuk menutup sumber dengan selamat dan menangkap serta mengendalikan panik. Gunakan jenis ralat tersuai untuk menyediakan mesej ralat yang lebih khusus dan boleh dibaca. Balut ralat untuk memberikan maklumat yang lebih terperinci. Ambil tindakan yang sewajarnya berdasarkan tahap keterukan ralat. Tulis ujian unit untuk merangkumi logik pengendalian ralat. . >:

panik akan menyebabkan atur cara keluar serta-merta dan menimbulkan ralat, yang tidak sesuai dalam kebanyakan kes.

Amalan terbaik untuk pengendalian pengecualian dalam fungsi golang

Gunakan tunda dan recover:

tunda membolehkan anda melakukan beberapa pembersihan sebelum fungsi kembali, manakala recover > > Boleh menangkap ralat apabila panik berlaku.

Kembalikan objek ralat:

Mengembalikan objek ralat memberikan maklumat ralat yang lebih terperinci, menjadikannya lebih mudah untuk nyahpepijat dan mengendalikan ralat.

Praktikal Contoh -contoh Fungsi berikut yang membuka dan membaca fail dan mencetak kandungannya kepada output standard:

func readFile(filename string) {
    f, err := os.Open(filename)
    if err != nil {
        panic(err)
    }
    defer f.Close()

    data, err := ioutil.ReadAll(f)
    if err != nil {
        panic(err)
    }

    fmt.Println(string(data))
}
Salin selepas log masuk
e mengaplikasikan amalan terbaik angkat angkat terbaik untuk memperbaiki fungsi ini:
  • panic panic 会导致程序立即退出并抛出错误,这对于在大多数情况下并不是理想的。
  • 使用 deferrecover defer 允许你在函数返回之前执行一些清理操作,而 recover 可以在发生 panic 时捕获错误。
  • 返回错误对象: 返回错误对象会提供更详细的错误信息,从而更容易调试和处理错误。

实战案例

考虑以下打开和读取文件并将其内容打印到标准输出的函数:

func readFile(filename string) error {
    f, err := os.Open(filename)
    if err != nil {
        return err
    }
    defer func() {
        if err := recover(); err != nil {
            fmt.Println("Error:", err)
        }
        if err := f.Close(); err != nil {
            fmt.Println("Error closing file:", err)
        }
    }()

    data, err := ioutil.ReadAll(f)
    if err != nil {
        return err
    }

    fmt.Println(string(data))
    return nil
}
Salin selepas log masuk

运用最佳实践

让我们应用最佳实践来改善这个函数:

  • 避免使用 panic 将 panic 替换为返回错误对象,以便获得更详细的错误信息。
  • 使用 deferrecover 对于可能引发错误的操作(例如打开文件和读取文件),使用 deferrecover Elakkan menggunakan panik:
  • Gantikan panik dengan mengembalikan objek ralat untuk mendapatkan maklumat ralat yang lebih terperinci.

Gunakan tunda dan recover:

Untuk operasi yang boleh menyebabkan ralat (seperti membuka dan membaca fail), gunakan tunda dan pulihkan untuk menutup fail dengan selamat dan mencetak mesej ralat jika panik berlaku.

Fungsi yang dipertingkatkan adalah seperti berikut:
    rrreee
  • Amalan terbaik lain
  • Gunakan jenis ralat tersuai:
  • Tentukan jenis ralat tersuai untuk menyediakan mesej ralat yang lebih spesifik dan boleh dibaca.
  • Ralat Balut:
  • Ralat Balut untuk memberikan maklumat yang lebih terperinci apabila memanggil fungsi lain daripada fungsi.
  • Pertimbangkan tahap keterukan ralat:
  • Ambil tindakan yang sesuai berdasarkan keterukan ralat, seperti mencuba semula, mengelog atau keluar dari program.
🎜🎜Lakukan Ujian Unit: 🎜 Tulis ujian unit untuk merangkumi logik pengendalian ralat dan mengesahkan kelakuannya. 🎜🎜

Atas ialah kandungan terperinci Amalan terbaik untuk pengendalian pengecualian dalam fungsi golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan