Closed cnlisea closed 6 years ago
最近项目更新依赖后(vendor),测试环境环境大量的panic,更新之前线上一切正常
Panic: runtime error: invalid memory address or nil pointer dereference goroutine 33 [running]: centerserver | runtime/debug.Stack(0x48, 0x0, 0x0) centerserver | /usr/local/go/src/runtime/debug/stack.go:24 +0xa7 centerserver | runtime/debug.PrintStack() centerserver | /usr/local/go/src/runtime/debug/stack.go:16 +0x22 centerserver | be/vendor/github.com/go-chi/chi/middleware.Recoverer.func1.1(0xc4200a4600, 0xc28fa0, 0xc42013c1c0) centerserver | /go/src/be/vendor/github.com/go-chi/chi/middleware/recoverer.go:28 +0x1b6 centerserver | panic(0xa53520, 0xef3f50) centerserver | /usr/local/go/src/runtime/panic.go:502 +0x229 centerserver | be/vendor/github.com/didi/gendry/scanner.CloseErr.Error(0x0, 0x0, 0x0, 0x0) centerserver | /go/src/be/vendor/github.com/didi/gendry/scanner/scanner.go:117 +0x22
查看更新记录后发现ScanClose方法更新了 更新前
func ScanClose(rows Rows, target interface{}) error { err := Scan(rows, target) if nil != rows { if nil == err { err = rows.Close() } } return err }
更新后
func ScanClose(rows Rows, target interface{}) error { err := Scan(rows, target) if nil != rows { errClose := rows.Close() if err == nil { // ==> if errClose != nil { err = newCloseErr(errClose) } } return err }
panic原因: 系统在调用ScanClose后获取返回的err, 并在后续代码中使用了err.Error()引起此问题
@cnlisea 谢谢指正,master已修复
最近项目更新依赖后(vendor),测试环境环境大量的panic,更新之前线上一切正常
查看更新记录后发现ScanClose方法更新了 更新前
更新后
panic原因: 系统在调用ScanClose后获取返回的err, 并在后续代码中使用了err.Error()引起此问题