2 回答
![?](http://img1.sycdn.imooc.com/54584c9c0001489602200220-100-100.jpg)
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
}
![?](http://img1.sycdn.imooc.com/545863e80001889e02200220-100-100.jpg)
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 关注
- 135 浏览
添加回答
举报