Rumah > pembangunan bahagian belakang > Golang > Bagaimana Mengendalikan Ralat yang Dikembalikan dengan Betul oleh Defer in Go?

Bagaimana Mengendalikan Ralat yang Dikembalikan dengan Betul oleh Defer in Go?

Susan Sarandon
Lepaskan: 2024-11-07 19:02:02
asal
950 orang telah melayarinya

How to Properly Handle Errors Returned by Defer in Go?

Pengendalian Ralat dan Penangguhan

Dalam Go, pernyataan penangguhan biasanya digunakan untuk melaksanakan fungsi atau operasi pembersihan selepas fungsi sekeliling kembali. Walau bagaimanapun, jika fungsi tertunda mengembalikan ralat, ia mungkin terlepas pandang disebabkan amalan biasa mengabaikan ralat yang dikembalikan melalui penangguhan, yang boleh membawa kepada tingkah laku sistem yang tidak dijangka.

Pertimbangkan senario berikut:

OpenDbConnection(connectionString string, logSql bool) (*gorm.DB, error) {
    logger := zap.NewExample().Sugar()
    defer logger.Sync()
}
Salin selepas log masuk

Dalam contoh ini, kaedah logger.Sync() mungkin mengembalikan ralat yang diabaikan, menyebabkan isu yang berpotensi tidak dapat diselesaikan.

Strategi Berkemungkinan

  • Gunakan pembolehubah ralat bernama: Mulakan pembolehubah ralat dalam skop fungsi dan tetapkan ralat yang dikembalikan oleh fungsi tertunda kepadanya. Ini membolehkan ralat diperiksa dan dikendalikan mengikut keperluan.
  • Fungsi tertunda tanpa hujah boleh panggil: Sertakan fungsi tertunda dalam fungsi tanpa nama tanpa hujah. Ini membenarkan fungsi tertunda untuk mengembalikan ralat, yang kemudiannya boleh diberikan kepada pembolehubah ralat yang dinamakan.
  • Kembalikan ralat dan kendalikannya dalam fungsi panggilan: Kembalikan ralat daripada fungsi dan biarkan fungsi panggilan mengendalikannya dengan sewajarnya. Ini mungkin lebih disukai jika ralat memerlukan pengendalian atau analisis khas.

Berikut ialah contoh menggunakan strategi pembolehubah ralat yang dinamakan:

func OpenDbConnection(connectionString string, logSql bool) (db *gorm.DB, err error) {
    logger := zap.NewExample().Sugar()
    defer func() {
        err = logger.Sync()
    }()

    // ... rest of function logic ...

    return db, err
}
Salin selepas log masuk

Dengan pendekatan ini, ralat boleh diperiksa dan dikendalikan dalam fungsi panggilan:

db, err := OpenDbConnection(connectionString, logSql)
if err != nil {
    // Handle the error
}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana Mengendalikan Ralat yang Dikembalikan dengan Betul oleh Defer in Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan