Go教程技术文章
-
用 fsnotify 监听配置文件时,连续 Write 事件并不等于连续修改。本文用一个可验证的去抖窗口合并写入抖动,再把稳定事件交给配置重载函数,并处理 Rename、Chmod 和 watcher.Errors 边界。499 收藏 -
encoding/xml 没有一个直接返回未知标签原始字节的接口。本文用 Token 按深度收集未知元素子树,再说明 RawToken 在命名空间前缀和起止标签校验上的区别。498 收藏 -
Go 1.23 起可以用 slices.Chunk 把切片按固定大小分成连续子切片并直接遍历。本文说明最小写法、尾块、空输入、非法 n、底层数组关系,以及旧版本 Go 的兼容实现。498 收藏 -
用 Go sync.Cond 实现有界队列时,关键不是记住 Signal 还是 Broadcast,而是让状态判断、Wait 循环和通知都在同一把锁下完成。本文拆解未满、非空和关闭三个条件,并给出按现象排查卡住问题的清单。498 收藏 -
Go testing.T.Cleanup 的关键不是把回调写在哪里,而是看它注册到哪个测试作用域以及登记顺序。本文解释同一 T 上的 LIFO 规则、父子测试边界、资源依赖登记方式和并发注册的排查方法。498 收藏 -
Go slog.HandlerOptions.Level 是日志最低级别门槛。本文用 TextHandler 和 JSONHandler 说明如何过滤 Debug,如何用 LevelVar 动态打开调试日志,并排查默认 logger、独立 logger 与性能开关不生效的问题。498 收藏 -
Go 使用 bufio.Reader 逐行读取时,ReadString 和 ReadBytes 会保留换行分隔符;本文对比 ReadLine、Scanner,并给出正确处理 CRLF 与 EOF 最后一行的写法。498 收藏 -
Go 1.27 为 QUIC 服务端握手增加 QUICConfig.ClientHelloInfoConn,用来指定 ClientHelloInfo.Conn 的底层连接。本文区分 TLS Conn、QUICConn 与底层 net.Conn,说明只读边界和回调取值方式。498 收藏 -
Go net.LookupAddr 会把 IP 反查为名称列表,而不是保证唯一的主机名。本文说明如何遍历多结果、处理部分结果与错误,并用 Resolver.LookupAddr 配合 context 设置超时。497 收藏 -
使用 Go os.File 处理大文件时,减少临时分配的关键是复用调用方缓冲区,而不是给 Read 寻找隐藏开关。本文比较固定缓冲区、ReadAt/WriteAt、io.Copy 和 io.CopyBuffer 的适用边界。497 收藏 -
用 Gonum 的 WeightedDirectedGraph 保存正权边,再通过 DijkstraFrom 和 Shortest.To 查询单源最短路径、累计权重,并说明不可达节点、负权边和 DijkstraFromTo 的选择边界。497 收藏 -
使用 google/uuid.NullUUID 读写可空数据库字段,说明 Valid、SQL NULL 与零 UUID 的区别,给出扫描和更新函数,并解释空字符串、错误处理和接口更新三态。497 收藏 -
Go bytes.IndexByte 接收一个字节切片和单个 byte,返回该字节第一次出现的索引;没有匹配时返回 -1。本文结合分隔记录、索引 0、空数据和 UTF-8 多字节字符说明正确用法。497 收藏 -
Go t.Run 子测试采用唯一语义标识,可让 CI 重跑命令保持稳定。本文比较命名方式,给出分组代码与分段正则,解释重复名、斜杠和父测试执行的边界。497 收藏 -
Go 1.26 为 testing.T、testing.B 和 testing.F 增加 ArtifactDir。本文用一个测试产物写入场景,讲清 -artifacts、-outputdir 与临时目录的保留边界。497 收藏