2 回答

TA貢獻1796條經驗 獲得超4個贊
您可以命名返回的錯誤變量并在函數內的任何位置進行初始化。
在這里檢查這個測試代碼
OpenDbConnection(connectionString string, logSql bool) (db *gorm.DB, err error) {
? ? logger := zap.NewExample().Sugar()
? ? defer func() {
? ? ? ? err = logger.Sync()
? ? }()
? ? // some logic here
? ? return db, err
}

TA貢獻1821條經驗 獲得超6個贊
接受的答案的另一個陷阱是錯誤檢查,例如
OpenDbConnection(connectionString string, logSql bool) (db *gorm.DB, err error) {
logger := zap.NewExample().Sugar()
defer func() {
errS := logger.Sync()
if errS != nil {
err = errS
}
}()
// some logic here
如果變量是在調用函數之前的部分err設置的。原始錯誤可以被該錯誤覆蓋。some logicdeferlogger.Sync()
在Go 1.20中,errors.Join添加了 來處理多個錯誤
新函數errors.Join返回一個包含錯誤列表的錯誤。
OpenDbConnection(connectionString string, logSql bool) (db *gorm.DB, err error) {
logger := zap.NewExample().Sugar()
defer func() {
err = errors.Join(err, logger.Sync())
}()
// some logic here
現在,如果發生任何錯誤,err將會被設置。如果兩個錯誤都存在,我們會收到一個新錯誤,其中它們與\n分隔符連接在一起。
- 2 回答
- 0 關注
- 178 瀏覽
添加回答
舉報