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.
【推荐】中国电信天翼云云端翼购节,2核2G云服务器一口价38元/年
【推荐】博客园携手 AI 驱动开发工具商 Chat2DB 推出联合终身会员
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 时间轮在 Netty , Kafka 中的设计与实现
· MySQL 优化利器 SHOW PROFILE 的实现原理
· 在.NET Core中使用异步多线程高效率的处理大量数据
· 聊一聊 C#前台线程 如何阻塞程序退出
· 几种数据库优化技巧
· 跟着 8.6k Star 的开源数据库,搞 RAG!
· 夜莺 v8 第一个版本来了,开始做有意思的功能了
· 推荐一个C#轻量级矢量图形库
· .NET 9 增强 OpenAPI 规范,不再内置swagger
· 区块链技术已经衰落了吗?(区块链已die)