Go语言技术文章
-
Go 的 os.File.ReadAt 按固定偏移读取文件,不移动共享游标,但它对短读更严格:只要返回字节数少于缓冲区长度,就一定带非空错误。本文用可运行示例拆开 n、err、EOF 与循环读取的边界。160 收藏 -
bytes.Buffer.Bytes 返回的是底层缓冲区的未读切片。Reset 会清空长度但保留存储,后续 Write 可能改写旧切片可见的数据;本文用最小实验说明安全复制和复用边界。160 收藏 -
Go 1.27 为 go fix 增加 atomictypes、embedlit、slicesbackward、unsafefuncs 四个 modernizer。本文用一套可回滚的检查流程说明如何先看改动,再决定是否接受自动改写。159 收藏 -
Go 1.21 引入的 maps.Clone 可以复制映射,但它只复制键和值本身,不会递归复制切片、指针等引用值;本文用可运行示例拆开浅拷贝、nil、空 map 和并发边界。158 收藏 -
Golang · Go教程 | 2天前 | golang · 基准测试 · testing · 性能 · benchmark · 基准测试 Go Go 1.24 testing.B.Loop 性能验证
Go 1.24 引入 testing.B.Loop 后,基准函数不必再手动围绕 b.N 组织循环。本文用一个可运行的小实验说明循环边界、计时窗口、结果保活和旧写法迁移,并给出核对 ns/op 与自定义指标的检查方法。156 收藏 -
Go 1.19 引入的 fmt.Appendf 可以把格式化结果直接追加到已有字节切片,适合协议拼接、日志缓冲和小型序列化场景。本文说明返回值、容量扩展、兼容写法和基准测试边界。156 收藏 -
用一个可复现的 Go 示例拆清 sync.Pool 的复用边界、GC 后对象消失的原因,以及它和真正缓存之间的区别,最后给出可验证的使用清单。156 收藏 -
Go 泛型约束写了具体类型,却不代表类型参数拥有该类型的全部方法。本文从类型集、方法集和接口约束的边界出发,解释常见编译错误,给出可运行的修复写法,并说明什么时候该把行为写进约束。154 收藏 -
用 Go 的 slog.LogValuer 控制日志字段的延迟求值与脱敏,厘清日志级别过滤、LogValue、slog.String 和 slog.Group 的调用边界。154 收藏 -
Go 的 os.File.ReadAt 适合多个 goroutine 按独立偏移量并发读取同一个文件,但每次调用仍要检查 n 和 err,尤其要正确处理 n < len(buf) 的短读与 io.EOF。152 收藏 -
Go 的 flag.FlagSet 适合把 start、stop、config 等子命令拆成彼此独立的参数集合。本文从参数隔离开始,说明 ContinueOnError、Usage、Parse 和错误码如何组合,并给出可运行的最小命令行程序。150 收藏 -
Golang · Go问答 | 2天前 | 切片 · golang · Slices · 迭代器 · Go 1.23 · 迭代器 slices.Chunk Go slices.Chunk 切片分组 尾块
slices.Chunk 从 Go 1.23 起把切片分成连续的小段并返回迭代器。本文从一次批处理误改原切片的故障入手,说明尾块、容量裁剪、n 参数和遍历期间修改的边界,给出可验证的安全写法。150 收藏 -
bytes.Buffer 和 strings.Builder 都能减少反复拼接带来的分配,但它们服务的结果类型不同。本文用日志行拼接、HTTP响应和复用场景对比 Write、WriteString、String、Bytes 与 Reset 的边界,给出可落地的选择规则。150 收藏 -
Go 1.20 引入的 errors.Join 可以把多个失败原因合成一个可匹配的错误。本文用批量校验和并发收口示例,说明遍历顺序、errors.Is/errors.As 的匹配边界,以及如何输出不丢信息的日志。150 收藏 -
用 Go embed.FS 读取内嵌模板时,路径必须是相对且规范化的 slash 路径。本文从路径校验、fs.ReadFile 错误分层和测试验收三个角度,给出可直接落地的安全读取函数。149 收藏