Go教程技术文章
-
bufio.Writer.Flush 遇到底层 Writer 短写时,会把未写完的数据留在缓冲区并记住错误。本文用可控的 io.Writer 演示状态变化、错误传播和安全恢复边界。361 收藏 -
strings.Builder 的 String 返回值可以保存并在后续写入或 Reset 后继续使用,但 Builder 本身不能复制;本文从 String、WriteString、Reset 和 Cap 的真实边界说明如何安全复用它。422 收藏 -
用 Go 的 base64.NewEncoder 流式编码时,Write 只处理完整 3 字节块,尾部数据要靠 Close 刷出;本文结合源码说明部分写入和错误传播的判断方法。174 收藏 -
Go 1.23 引入的 slices.Values 可以把切片包装成 iter.Seq。本文从实现、空切片和提前停止三个边界出发,说明它与普通 range、slices.Collect 的连接方式。201 收藏 -
Go 1.26 允许 new(expr) 直接从表达式推断指针类型。本文用切片和映射对比旧写法,说明零值、可写性、类型推断和迁移检查边界。366 收藏 -
Go 1.23 的 maps.Keys 返回 iter.Seq,遍历顺序仍不保证稳定。本文从 for range 与 maps.Keys 的关系出发,演示如何用 slices.Sorted 得到可复现的键序列,并说明排序成本与兼容边界。251 收藏 -
从 io.Copy 的接口选择入手,拆解 os.File.ReadFrom 如何走 ReaderFrom 快路径,以及短读、EOF 和部分写入时该怎样验证。289 收藏 -
sync.Map 的 Range 适合遍历当前可见条目,却不提供并发快照。本文用 Store、Delete 与 Range 的交错过程拆开这个边界,并给出需要一致视图时的替代写法。308 收藏 -
Go 1.26 的实验包 runtime/secret 用 secret.Do 包住处理敏感数据的调用链,清理寄存器和栈上的临时值,并在堆对象失去引用后交给垃圾回收清理。本文说明启用方式、返回值复制、panic 与平台限制。340 收藏 -
runtime.KeepAlive 的作用不是阻止 GC,而是把对象的可达性延长到指定调用点。本文用外部资源句柄的最小例子说明终结器为什么可能过早运行、KeepAlive 应该放在哪里,以及如何用资源关闭状态验证调用顺序。353 收藏 -
Go 服务收到 SIGINT 或 SIGTERM 后,不能只依赖进程直接退出。本文拆解 os/signal.NotifyContext 如何把信号转成 context.Done,说明 stop 的资源释放、取消传播和优雅退出的验收边界。374 收藏 -
Go 1.22 引入的 slices.Concat 能按顺序合并多个切片。本文从空输入、容量增长和底层数组别名三个边界出发,给出可验证的使用方式和选择建议。165 收藏 -
用 Go archive/tar Reader.Next 读取带 PAX 稀疏扩展的归档,核对 Header.Size、空洞补零、PAXRecords 与遍历边界,并给出可复现的验收方法。299 收藏 -
用一个批量消费键值序列的场景,拆开 Go iter.Pull2 的 next、stop 与提前退出边界,说明如何把 Seq2 接入旧式 for 循环并避免遗漏清理。222 收藏 -
用 log/slog 的 HandlerOptions.AddSource 控制 source 字段,理解调用位置信息从哪里来、何时值得开启,以及如何在生产日志中验证它的代价。487 收藏