Go语言技术文章
-
Go 泛型调用报错时,问题常常不在类型参数本身,而在约束的类型集、方法集与调用点能否同时建立推导方程。本文用三个最小例子拆开接口约束、显式实例化和返回值推导的边界。228 收藏 -
Go fuzzing 里,F.Add 负责把开发者已知的边界样本放进种子语料,F.Fuzz 再从这些样本出发进行覆盖引导的变异;失败输入保存到 testdata/fuzz 后,会成为后续 go test 默认执行的回归样本。311 收藏 -
Golang · Go问答 | 4天前 | 性能优化 · encoding · Go问答 · Go 1.24 · 性能 Go encoding.TextAppender MarshalText AppendText
Go 1.24 的 encoding.TextAppender 允许类型直接把文本表示追加到已有字节切片。本文用 AppendText 与 MarshalText 对比,说明何时能减少临时分配、如何保持语义一致,以及实现和基准中的边界。332 收藏 -
批量导出或生成大文件时,不要先拼成一个巨型字节切片。本文用 io.Copy、os.CreateTemp 和 os.Rename 组成流式落盘链路,说明内存边界、失败清理和原子替换如何配合。122 收藏 -
slog.Logger 写日志前会先询问 Handler.Enabled。把昂贵的参数构造放到级别判断之后,可以避免被过滤的日志仍然消耗 JSON 序列化、查询和字符串拼接成本。381 收藏 -
Go 1.25 的 sync.WaitGroup.Go 把启动 goroutine、计数和完成收口放进一个方法,但它不负责取消任务,也要求 f 不发生 panic。本文用一个批处理示例拆开调用链、闭包变量和复用边界。174 收藏 -
Go 的 http.Client.Timeout 覆盖整个请求生命周期,而 Transport.ResponseHeaderTimeout 只等待响应头。把两者放在一起理解,才能避免响应体读取被误判成连接超时。205 收藏 -
用 bytes.Reader.WriteTo 把内存中的字节流交给 io.Writer,重点核对读取游标、短写返回和 Reader 复用时的状态边界。373 收藏 -
线上 Go 接口偶发超时,通常不是把超时时间调大就能解决。本文用一个订单查询场景演示如何沿 context 从 Handler 传到下游调用,结合日志和取消信号定位未结束的请求,并给出回滚与告警检查方法。391 收藏 -
Go 1.22 引入的 database/sql.Null[T] 用 V 保存值、用 Valid 表示数据库 NULL。本文用可运行示例解释 Scan(nil)、Scan(0) 与 Value() 的边界,避免把零值误当成空值。102 收藏 -
Go 的 copy 返回实际复制的元素数量,通常由目标切片长度决定;当源目标切片重叠或容量被误读时,返回值和最终数据更容易被误判。本文用可运行示例拆开边界。233 收藏 -
multipart.Reader.NextRawPart 会按 MIME boundary 逐个返回 Part,并保留 quoted-printable 的原始传输编码。本文用一个带前导换行的 multipart body,说明如何区分边界前空白、Part.Read 和 io.EOF,避免把未读内容或编码差异误判成解析失败。453 收藏 -
slices.Values 把切片按顺序暴露为 iter.Seq,range 消费它时仍然读取原切片;理解 yield 返回值、提前停止和底层数据共享,才能避免把迭代器误当成快照。本文用一个可运行示例验证修改可见性与终止边界。468 收藏 -
同一个模块在两台机器上的依赖下载或交叉编译结果不一致时,go env -changed 能快速列出有效值偏离默认值的环境设置。本文把 GOENV、go env -w 与 shell 环境拆开,给出可复现的检查顺序。269 收藏 -
Go 的 time.Ticker.Reset 会停止当前节拍并按新周期重新计时。本文用一个动态刷新任务说明 Reset 的调用边界、正数周期校验、慢消费者丢 tick 以及并发读写时应如何组织所有权。494 收藏