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
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!