Go语言技术文章
-
Go channel 的关闭责任应由能确认所有发送结束的一方承担。本文用单发送方、多发送方和取消信号三个场景,说明如何避免向已关闭 channel 发送导致 panic。393 收藏 -
io.LimitReader 到达 N 字节后会主动返回 EOF,后续底层错误自然无法被观察。本文用请求体上限场景说明错误为何消失,并给出 max+1 检测超限的写法。180 收藏 -
Go channel 关闭后接收仍会得到元素类型的零值,不能只看 v 判断结束。本文用 comma-ok 区分有效零值、关闭空 channel 和 nil channel,并说明缓冲 channel 的正确消费方式。361 收藏 -
用 Go io.LimitReader 限制上传时,不能只看 EOF;把读取上限设为 maxBytes+1,再根据实际读取字节数判断是否超限。333 收藏 -
解释 Go 中 nil channel 的阻塞语义,以及如何用 select default 对可选通道做非阻塞尝试,同时区分 nil、未就绪和 closed channel。183 收藏 -
讲清 Go io.ReadFull 读取固定二进制头部时的缓冲区安排:先读定长头,再校验长度并分配载荷,区分 EOF 与 ErrUnexpectedEOF。427 收藏 -
Go 中从 nil channel 接收不会返回零值,而是永久阻塞;只有已关闭且已耗尽的 channel 才会返回元素类型零值并令 ok 为 false。本文用状态对比和可取消示例说明排查与修复边界。111 收藏 -
Go 的网络连接是字节流,一次 Read 只保证返回当前可用数据。本文用固定长度包头示例说明短读原因、io.ReadFull 的正确边界,以及 EOF、超时和变长消息的处理方式。115 收藏 -
Go 中向 nil channel 发送会永久阻塞,本文从运行时语义、排查路径和修复边界说明如何定位声明遗漏、select 门控与退出控制问题。345 收藏 -
Go io.ReadFull 读取固定长度消息时,只有 n 等于缓冲区长度且 err 为 nil 才算成功;本文区分 io.EOF、io.ErrUnexpectedEOF 与其他 Reader 错误,并给出安全的读取循环写法。219 收藏 -
看到 Go 编译报告中的 moved to heap 时,不要只凭一条提示判断性能。本文用 -gcflags=-m=2 追踪地址和生命周期,再结合 -benchmem 对照确认是否值得优化。328 收藏 -
Go 子测试调用 t.Parallel 后,输入、可变夹具和共享资源需要分别管理。本文用一个小型测试项目说明循环变量绑定、数据隔离、互斥锁、父级清理与 go test -race 的验收方法。303 收藏 -
go vet 的 printf 检查可以在编译前发现格式化动词与参数数量、类型不匹配的问题。本文用最小示例解释诊断信息、修复方式,以及自定义日志包装函数如何接入检查。263 收藏 -
Go 的 testing.T.Cleanup 会在当前测试及其子测试完成后调用清理函数,同一测试中多个回调按后注册先执行。本文用子测试示例说明 LIFO 顺序、资源依赖和并发注册边界。242 收藏 -
Go runtime.SetFinalizer 只能作为非内存资源释放的兜底,不能替代显式 Close。本文从 GC 触发时机、进程退出、循环引用、KeepAlive 和幂等关闭几个边界说明正确的资源生命周期设计。497 收藏