Go语言技术文章
-
Go t.Parallel 本身不是随机失败的根因,真正危险的是并行测试共享了会变化的进程级状态。本文从生命周期、共享资产和隔离策略入手,给出可重复排查清单。124 收藏 -
Go test -run 匹配的是测试名称而非文件名。通过包范围、正则锚点和子测试层级解释未执行现象,并区分缓存、跳过、未匹配与构建失败,给出准确命令及独立示例。124 收藏 -
Go 的 fs.ValidPath 只检查 fs.FS 路径名是否符合 slash-separated、unrooted 规则,不负责判断文件是否存在。本文用具体输入边界解释点号、斜杠、反斜杠和冒号,并给出放在 FS 调用入口的检查写法。124 收藏 -
解释 Go slog JSONHandler 的 JSON 字段顺序为何不能当作契约,并给出按键解析、稳定测试和固定文本格式化方案。124 收藏 -
Go x/text/runes 处理的是 UTF-8 文本中的 rune,不是可以直接按字节下标切开的字符。本文从 Remove、Map、If 和 transform.String 的关系出发,说明字节索引、分块读取与非法 UTF-8 的边界。124 收藏 -
Go io.NewOffsetWriter 会把逻辑写入偏移映射到 WriterAt 的指定起点,但它不自动限制区间长度。本文用最小示例说明 Write、WriteAt、Seek 的偏移关系,以及如何补上长度检查。124 收藏 -
这段内容聚焦一个很实用的问题:在 Go 里,怎么把括号中的内容准确提取出来。常见做法主要有两类:一类是用 regexp 包配合捕获组来匹配,灵活度更高;另一类是借助 strings.Index 做轻量级定位,写法更直接、开销也更小。接下来会结合代码示例、性能对比和边界情况处理,把这两种方式各自适合什123 收藏 -
用 Go slices.Chunk 把一批记录切成分页批次,重点说明尾批、空输入、n 校验和切片别名风险,并给出可复现的基线与验收方法。123 收藏 -
解释 Go iter.Pull2 如何把 iter.Seq2 转成逐项拉取的 next 与 stop,重点验证提前停止时为什么必须调用 stop,以及双值序列结束后的边界行为。123 收藏 -
archive/zip.NewReader 要求 io.ReaderAt 和准确的字节大小,不能直接接收只有顺序读取能力的网络流。本文从接口边界出发,比较 bytes.Reader、临时文件和流式解压三种路径,给出资源释放、尺寸校验与安全路径检查的实用写法。123 收藏 -
用 Go channel、固定数量 worker 和 WaitGroup 搭建有界并发工作池,厘清任务投递、队列容量、关闭责任与结果收口,避免无限创建 goroutine 和 send on closed channel。123 收藏 -
filepath.Clean 只做词法清洗,不能单独保护固定根目录。本文用 Go 标准库示例说明如何组合 filepath.IsLocal、fs.ValidPath、filepath.Localize 和 filepath.Join,处理用户路径与跨平台文件名。123 收藏 -
Go database/sql 事务中,业务语句失败、Rollback 失败和 Commit 失败对应不同的处理边界。本文用一段可复用代码说明如何保留原始错误、避免重复回滚,并解释提交失败后为什么要先按幂等键核对状态。123 收藏 -
Go context.WithValue 不要直接使用 string 或 int 作为跨包 key。本文用包内私有 key 类型和类型安全访问器,解决值碰撞、嵌套覆盖与类型断言分散的问题。123 收藏 -
Go 限制上传读取长度时,不要只相信 Content-Length,也不要直接 io.ReadAll。本文用 io.LimitReader 暴露 maxBytes+1 字节,再配合 io.Copy 流式写入临时目标,区分正常文件、超限文件和读取失败。123 收藏