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
Susan Sarandonasal
2024-11-07 19:02:02929semak imbas

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()
}

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
}

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

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

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!

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