Go语言技术文章
-
FindAllStringSubmatchIndex 返回的是原字符串的字节区间,不是字符下标。本文用一个日志标注小工具拆开整段匹配、捕获组、未匹配分组和 UTF-8 边界,给出可运行的映射方法。487 收藏 -
用 log/slog 的 HandlerOptions.AddSource 控制 source 字段,理解调用位置信息从哪里来、何时值得开启,以及如何在生产日志中验证它的代价。487 收藏 -
Go 1.21 引入的 clear 可以一次删除 map 的全部元素,但它不负责并发保护,也不等于立刻把底层内存还给操作系统。本文用可运行基准拆开清空速度、复用场景和重建 map 的边界。487 收藏 -
Go 1.23 引入的 slices.Values 可以把切片暴露为 iter.Seq。本文用同一段可运行示例验证 range 消费、空切片和提前 break 的行为,并说明它与直接遍历切片的边界。487 收藏 -
Go 的 time.Time 默认通过 MarshalJSON 输出 RFC3339 字符串,时区表现为 Z 或数值偏移,纳秒来自原始时间值。本文说明如何理解默认结果,并用 Format 明确控制 API 的时区与精度。487 收藏 -
Go 1.22 起,http.ServeMux 支持在同一模式中注册 HTTP 方法、路径和通配符。本文用用户接口示例说明 PathValue、最具体匹配、冲突 panic、405 以及旧项目兼容边界。487 收藏 -
Go 的 errors.As 会沿着错误包装链查找匹配类型。本文用自定义错误说明 %w、目标变量和指针层级的正确写法,并给出迁移与回归检查清单。487 收藏 -
本地能通过、CI 却提示 module checksum 缺失,通常不是 Go 随机失败,而是本地缓存掩盖了缺少的 go.sum 条目,或 CI 的只读与模块下载环境不同。本文给出复现、补齐和固定构建输入的方法。487 收藏 -
Go archive/tar 会自动处理 PAX 元数据头。读取时用 Header 获取已映射的标准字段,用 Header.PAXRecords 读取自定义扩展键,并在 Next、路径和类型转换处做好兼容处理。487 收藏 -
Go error经过%w包装后不应再依赖完整字符串判断。本文区分错误文本、哨兵错误和具体类型,给出errors.Is、errors.As及多错误包装的替代方案。487 收藏 -
Go TLS 证书验证失败时,不要先关闭校验。先按 x509 错误判断主机名是否匹配,再检查 RootCAs、中间证书和系统根证书,最后用 VerifyOptions 做独立定位。487 收藏 -
回答 Go io.Reader 读取时为什么要先处理 n 再判断 err,解释 n>0 且 err==io.EOF 的边界、错误写法为什么会丢最后一段,并给出可复用读取循环和排查清单。486 收藏 -
Go 泛型函数接收 map 的 key 时,comparable 约束看似简单,却会牵涉接口值、切片、map 和运行时 panic 边界。本文用可编译示例拆解约束选择,并给出从 any 迁移到类型参数的检查清单。486 收藏 -
context.AfterFunc 的 stop 返回 false,不等于回调丢失;它表示回调可能已经启动,或此前已经停止。本文用连接读超时和资源清理场景拆解停止竞态、完成同步与幂等写法。486 收藏 -
encoding/base64 的 AppendEncode 会把编码结果追加到已有切片,适合复用缓冲区。本文通过可运行示例说明输出容量、尾部数据和 RawStdEncoding 的边界。486 收藏