2 回答

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊
您可以命名返回的錯(cuò)誤變量并在函數(shù)內(nèi)的任何位置進(jìn)行初始化。
在這里檢查這個(gè)測(cè)試代碼
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貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超6個(gè)贊
接受的答案的另一個(gè)陷阱是錯(cuò)誤檢查,例如
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
如果變量是在調(diào)用函數(shù)之前的部分err設(shè)置的。原始錯(cuò)誤可以被該錯(cuò)誤覆蓋。some logicdeferlogger.Sync()
在Go 1.20中,errors.Join添加了 來(lái)處理多個(gè)錯(cuò)誤
新函數(shù)errors.Join返回一個(gè)包含錯(cuò)誤列表的錯(cuò)誤。
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
現(xiàn)在,如果發(fā)生任何錯(cuò)誤,err將會(huì)被設(shè)置。如果兩個(gè)錯(cuò)誤都存在,我們會(huì)收到一個(gè)新錯(cuò)誤,其中它們與\n分隔符連接在一起。
- 2 回答
- 0 關(guān)注
- 189 瀏覽
添加回答
舉報(bào)