Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Corak dan anti-corak pengendalian ralat fungsi Golang

Corak dan anti-corak pengendalian ralat fungsi Golang

王林
王林asal
2024-04-24 13:30:01863semak imbas

Mod pengendalian ralat fungsi Go termasuk: menggunakan ralat.New() untuk membuat ralat, membalut ralat asas dan mengembalikan sifar untuk menunjukkan tiada ralat. Anti-corak termasuk menggunakan nombor atau rentetan ajaib untuk mewakili ralat, mengendalikan ralat secara tersirat, mengabaikan ralat dan corak keluar tertunda. Amalan terbaik: Gunakan errors.New() untuk mencipta dan mengembalikan ralat. Contoh anti-corak: Abaikan ralat yang dikembalikan oleh os.Open(). Mengikuti amalan terbaik dan mengelakkan anti-corak menghasilkan kod yang jelas, boleh diselenggara dan mudah dinyahpepijat.

Corak dan anti-corak pengendalian ralat fungsi Golang

Corak dan Anti-Corak Pengendalian Ralat Fungsi Go

Berkenaan tentang pengendalian ralat dalam Go, terdapat banyak cara untuk melakukannya. Walau bagaimanapun, tidak semua model sesuai. Artikel ini akan meneroka amalan terbaik dan anti-corak untuk pengendalian ralat fungsi dalam Go dan memberikan contoh kehidupan sebenar untuk menunjukkannya.

Amalan Terbaik:

  • Gunakan errors.New() untuk mencipta ralat: errors.New() 创建错误:这是一个创建新错误的最常见方法,它可以返回带有简洁描述的 error 值。
  • 用底层错误包装错误:如果一个函数接到一个错误,可以将其包装在一个新的错误中,以提供关于错误来源的更多上下文。
  • 返回 nil 表示没有错误:如果函数未遇到错误,则应返回 nil
  • 不要使用全局错误变量:使用全局错误变量会产生竞争条件,并使代码难以调试。
  • 处理错误:所有错误都应在函数中处理,而不是将其忽略。理想情况下,应返回错误指示函数失败。

反模式:

  • 使用魔数或固定的字符串表示错误:这会使代码难以维护和扩展。
  • 隐式处理错误:不要使用 if err != nil { ... } 来检查错误,然后直接返回,因为这会使错误处理难以跟踪。
  • 忽略错误:始终处理错误,即使你认为它们不太可能发生。
  • 使用延迟退出模式:在函数末尾使用 if err != nil { return err } 的模式会使代码难以阅读和维护。

真实案例:

最佳实践:以下函数使用 errors.New() 创建一个新的错误,并返回它以向调用者指示文件打开失败:

func OpenFile(path string) (*os.File, error) {
    f, err := os.Open(path)
    if err != nil {
        return nil, errors.New("failed to open file: " + err.Error())
    }
    return f, nil
}

反模式:以下函数没有处理 os.Open()Ini ialah cara paling biasa untuk mencipta ralat baharu, yang mengembalikan ralat.

Balut ralat dengan ralat asas:

Jika fungsi menerima ralat, ia boleh dibalut dengan ralat baharu untuk menyediakan lebih banyak konteks tentang sumber ralat. 🎜🎜Kembalikan nil untuk menunjukkan tiada ralat: 🎜Jika fungsi tidak menemui ralat, ia harus mengembalikan nil. 🎜🎜Jangan gunakan pembolehubah ralat global: 🎜Menggunakan pembolehubah ralat global boleh mewujudkan keadaan perlumbaan dan menyukarkan kod untuk nyahpepijat. 🎜🎜Mengendalikan Ralat: 🎜Semua ralat harus dikendalikan dalam fungsi dan bukannya diabaikan. Sebaik-baiknya, ralat harus dikembalikan yang menunjukkan bahawa fungsi itu gagal. 🎜🎜Anti-corak: 🎜🎜🎜🎜🎜Menggunakan nombor ajaib atau rentetan tetap untuk mewakili ralat: 🎜Ini boleh menyukarkan kod untuk dikekalkan dan dilanjutkan. 🎜🎜Pengendalian ralat tersirat: 🎜Jangan gunakan if err != nil { ... } untuk menyemak ralat dan kemudian kembali terus, kerana ini akan menyukarkan pengendalian ralat trek. 🎜🎜Abaikan Ralat: 🎜Sentiasa mengendalikan ralat, walaupun anda fikir ia tidak mungkin berlaku. 🎜🎜Gunakan corak keluar tertunda: 🎜Menggunakan corak if err != nil { return err } pada penghujung fungsi boleh membuat kod sukar dibaca dan dikekalkan. 🎜🎜Kes sebenar: 🎜🎜🎜🎜Amalan terbaik: 🎜Fungsi berikut menggunakan errors.New() untuk mencipta ralat baharu dan mengembalikannya kepada pemanggil Menunjukkan bahawa fail dibuka gagal: 🎜
func OpenFile(path string) *os.File {
    f, _ := os.Open(path)
    return f
}
🎜🎜Anti-corak: 🎜Fungsi berikut tidak mengendalikan ralat yang dikembalikan oleh os.Open(), yang mungkin menyebabkan program ranap: 🎜rrreee🎜Yang terbaik cara untuk melakukan ini adalah dengan mengikuti langkah-langkah yang digariskan dalam artikel ini Dengan amalan dan mengelakkan anti-corak, anda boleh menulis kod yang jelas, boleh diselenggara dan mudah untuk nyahpepijat. 🎜

Atas ialah kandungan terperinci Corak dan anti-corak pengendalian ralat fungsi Golang. 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