ZhangZhihui's Blog  

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.

posted on   ZhangZhihuiAAA  阅读(23)  评论(0编辑  收藏  举报
编辑推荐:
· 时间轮在 Netty , Kafka 中的设计与实现
· MySQL 优化利器 SHOW PROFILE 的实现原理
· 在.NET Core中使用异步多线程高效率的处理大量数据
· 聊一聊 C#前台线程 如何阻塞程序退出
· 几种数据库优化技巧
阅读排行:
· 跟着 8.6k Star 的开源数据库,搞 RAG!
· 夜莺 v8 第一个版本来了,开始做有意思的功能了
· 推荐一个C#轻量级矢量图形库
· .NET 9 增强 OpenAPI 规范,不再内置swagger
· 区块链技术已经衰落了吗?(区块链已die)
 
点击右上角即可分享
微信分享提示