Go语言技术文章
-
讲清 Go time.Timer 复用时 Stop、Drain 和 Reset 的调用边界,并区分 Go 1.23 新语义与旧版本写法,用最小循环和检查清单避免旧值、阻塞与并发复用问题。328 收藏 -
用一个可迁移的 Go 泛型 API 例子,解释约束中的 ~T 如何放宽命名类型匹配范围,以及它对调用方兼容性、返回值设计和后续演进的影响。389 收藏 -
Go 的 net.Conn.SetDeadline 会把读写截止时间写入连接状态,超时后不会因为下一次读写自动恢复。本文用一个连接复用场景说明清理时机、读写边界和可验证的修复写法。277 收藏 -
在 Go 服务中把外部 DTO 隔离在防腐层,能把供应商字段变化挡在接口边界外;本文用订单状态同步示例说明映射、校验、版本兼容与测试验收如何落地。406 收藏 -
Go 里用 CmdContext 设置超时后,父命令返回并不等于整棵子进程树已经退出。本文用可复查的命令场景解释 context 取消、Wait 返回、子进程残留和回收验证之间的边界,给出带退出状态检查的处理方式。470 收藏 -
用 Go 处理连续 JSON 流时,Decoder.Token、Decode 和 Buffered 的边界很容易被误读。本文从两个 JSON 连在一起的现场出发,验证读取位置、解释看似吞值的原因,并给出可复查的多对象解析写法。435 收藏 -
Golang · Go问答 | 4天前 | 错误处理 · go · 数据库 · 排查 · SQL · rows.Close rows.Next Rows.Err Go database/sql 空结果
Go 查询 database/sql 时,Rows.Next 返回 false 不一定代表空结果。本文用一个分页查询故障拆开 Next、Err、Close 的职责,给出可复用的遍历模板、异常定位顺序与资源收尾检查。444 收藏 -
time.Ticker.Stop 只负责停止后续计时,不承诺把已经进入通道的值清空。本文从定时刷新任务的退出现场出发,拆解停止语义、旧值竞态、goroutine 泄漏与可验证的退出写法。467 收藏 -
用 Go crypto/rand 读取固定长度随机字节时,区分 Reader 的短读语义、io.ReadFull 的完整读取保证与错误传播边界,并用可控测试替身复核实现。129 收藏 -
给 Go HTTP 接口限制请求体时,http.MaxBytesReader 超限并不会自动替处理器写完响应。本文用一个可运行的上传接口说明读取错误、状态码时机、连接收尾和测试验收应该怎样配合。218 收藏 -
Go slog 的 AddSource 能把日志调用点写进 source 字段,排查并发服务时很有用,但每条日志都要承担调用点定位和格式化成本。本文用可验证的基准与生产开关说明它的代价、适用范围和安全切换方式。192 收藏 -
从切片别名、append 扩容和底层数组保留三个角度,说明 Go slices.Clone 的适用边界,并用可运行示例验证复制后的修改、nil 语义与内存释放判断。126 收藏 -
Go 服务偶发变慢时,runtime/metrics 能把 GC 频率、暂停和堆目标放到同一组可采样指标里。本文从一次延迟抖动开始,说明如何选指标、对齐时间窗口,并排除把正常回收误判成 GC 压力。278 收藏 -
Go 的一次取值函数适合惰性初始化,但初始化函数一旦 panic,后续调用会再次 panic,而不是自动重试。本文拆开这个语义,给出可观测、可控的失败处理方案。152 收藏 -
Go 的 map range 顺序没有稳定保证,同一张 map 也不能把第一次遍历结果当成下一次的顺序。本文用一个最小示例说明随机化边界,并给出测试、日志和接口输出需要排序时的可靠写法。119 收藏