-
我的 Go 程序某个功能莫名其妙地卡住、既不报错也不返回,goroutine 越积越多最后内存涨爆,排查半天才发现是一个 channel 忘了 make 初始化、它是 nil,而往 nil channel 收发竟然不是报错、而是永久阻塞的深度复盘
我有段 Go 代码用 channel 在 goroutine 间传数据,在结构体里声明了一个 channel 字段,启动 goroutine 往里发另一边收,自测小场景跑通了。可某功能上线后行为诡异:它莫名卡住——既不报错也不返回也不超时,就静静挂着;随请求进来卡住的 goroutine 越积越多内存一路涨爆。我以为是死锁、下游慢,查半天没问题。直到打 goroutine 栈,发现一大堆都阻塞在那…- 0
- 0
-
我的函数明明返回了一个 nil 的错误指针,调用方 if err != nil 却判定它不为 nil 进了错误分支,我对着 Go 里 nil 指针赋给接口后接口不等于 nil 这个坑排查了大半天的复盘
一个让我对 Go 的 interface 从以为懂到真正懂的烧脑坑,诡异到我一度怀疑 == 坏了:我返回的明明是 nil,调用方判断 != nil 却不是 nil。写了个返回 error 的函数,习惯性先声明具体错误类型指针 var e *MyError = nil,没出错时它保持 nil,最后 return e。传 true 不出错、e 一直是 nil,可调用方 if err != nil 却成…- 0
- 0
-
我的 Go 程序往一个 struct 里的 map 字段写值就 panic,可同一个 struct 里的 slice 字段 append 却好好的,我对着 nil map 排查了大半天的复盘
用 Go 写数据聚合,定义了个 struct 里有 map 字段和 slice 字段,创建实例后往 slice append 元素一切正常,可往 map 写值那行直接 panic: assignment to entry in nil map。满脸问号:同一个 struct、同样创建后就用、同样是集合类型,凭什么 slice 能用 map 就崩?排查大半天才理解 Go 的零值哲学,以及 nil m…- 0
- 0
-
err 是 nil 却不等于 nil:Go 接口 nil 避坑复盘
这是一个让我对着 if err != nil 这行 Go 程序员每天写八百遍的代码彻底懵掉的 bug。现象是我们一个接口明明一切正常没有任何错误,可它总是走进错误处理的分支对用户返回系统异常。我盯着那个判断条件看了半天:函数我也看了正常情况下它返回的就是 nil 啊,既然返回了 nil 那 err != nil 不就该是 false 就不该进错误分支吗?可它偏偏进了,我甚至开始怀疑是不是 Go 的…- 0
- 0
-
返回 nil 却判定非 nil:Go nil 接口陷阱避坑
有个 Go 服务某接口偶发返回处理失败,可日志里找不到任何真正的错误——业务逻辑明明跑成功了数据也对,它就是固执地走进出错分支。我盯着那段再标准不过的代码看半天:err := doSomething(); if err != nil { return err },逻辑清清楚楚、doSomething 内部确认成功返回的是 nil,可那个 if err != nil 偏偏判定为真。一个等于 nil …- 4
- 0
nil
幸运之星正在降临...
点击领取今天的签到奖励!
恭喜!您今天获得了{{mission.data.mission.credit}}积分
我的优惠劵
-
¥优惠劵使用时效:无法使用使用时效:
之前
使用时效:永久有效优惠劵ID:×
没有优惠劵可用!





