Then looking at this code:
res, err := client.Do(req)
defer res.Body.Close()
if err != nil {
return nil, err
}
I'm guessing that err
is not nil
. You're accessing the .Close()
method on res.Body
before you check for the err
.
The defer
only defers the function call. The field and method are accessed immediately.
So instead, try checking the error immediately.
res, err := client.Do(req)
if err != nil {
return nil, err
}
defer res.Body.Close()
CONNECT_DB: _, err = connPool.Query(ctx, "SELECT * FROM users LIMIT 1;") fmt.Println(err) if strings.Contains(err.Error(), "failed to connect to") { if retryTimes < RETRY_LIMIT { retryTimes++ time.Sleep(RETRY_INTERVAL) goto CONNECT_DB } else { log.Fatal("failed to connect to db:", err) } }
zzh@ZZHPC:/zdata/Github/zimplebank$ go run main.go <nil> panic: runtime error: invalid memory address or nil pointer dereference [signal SIGSEGV: segmentation violation code=0x1 addr=0x18 pc=0x9772d3] goroutine 1 [running]: main.init.0() /zdata/Github/zimplebank/main.go:42 +0x353 exit status 2
Cause: err is nil, but uses err.Error().
Adding nil check can fix this error.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律