Go语言技术文章
-
批量导出或生成大文件时,不要先拼成一个巨型字节切片。本文用 io.Copy、os.CreateTemp 和 os.Rename 组成流式落盘链路,说明内存边界、失败清理和原子替换如何配合。122 收藏 -
sync.Map.LoadOrStore 会根据键是否已经存在,在并发初始化时返回新值或旧值。本文用一个可运行的缓存初始化例子拆开 loaded、类型断言和重复构造的边界。120 收藏 -
Golang · Go问答 | 4天前 | 标准库 · golang · 正则表达式 · 字符串处理 · Go问答 · 正则表达式 Go regexp FindAllStringSubmatchIndex 子表达式
Go regexp 的 FindAllStringSubmatchIndex 返回结果中出现 -1,并不代表整体匹配失败,而是某个可选子表达式没有参与本次匹配。本文用一个可运行示例解释下标含义、判断方式和切片边界。120 收藏 -
Go 的 flag.Func 适合把重复出现的命令行参数交给同一个回调逐次处理,但默认值不会自动触发回调,回调返回错误还会改变 Parse 的结果。本文用可运行示例拆清调用次数、参数顺序与失败边界。120 收藏 -
用 Go regexp.Regexp.FindReaderIndex 在 io.RuneReader 上定位流式文本匹配,解释返回值为何是字节区间、UTF-8 字符如何换算,以及为什么方法可能继续向后读取。120 收藏 -
Go 服务突然报 too many open files 时,先用 /proc/fd 和 lsof 判断文件描述符消耗,再检查 HTTP 响应体关闭、连接复用和 ulimit 配置,最后用指标与回滚手段确认修复有效。119 收藏 -
Go 的 PathEscape 与 QueryEscape 都能处理 URL 特殊字符,但服务端解析位置不同。本文用路径参数、查询参数和反向解析示例,说明编码边界、加号语义与测试方法。119 收藏 -
Go 的 map range 顺序没有稳定保证,同一张 map 也不能把第一次遍历结果当成下一次的顺序。本文用一个最小示例说明随机化边界,并给出测试、日志和接口输出需要排序时的可靠写法。119 收藏 -
slog.Handler 收到的 Record 可能携带共享属性存储。单份转发通常可直接传递,多份分发或异步保留时应调用 Record.Clone,本文用 fan-out 与异步队列场景说明修改、并发和生命周期边界。119 收藏 -
Go 1.24 起可通过 net/http.Server.Protocols 明确设定 HTTP/1、HTTP/2 与明文 HTTP/2 的接受范围。本文给出 TLS 服务的最小配置、默认行为边界和回归检查方法。117 收藏 -
用户可控 URL 一旦进入 Go HTTP 客户端,字符串黑名单远远不够。本文从一次图片抓取接口的故障切入,拆解 scheme、端口、DNS 解析、私网地址和重定向的校验顺序,并给出可测试的最小实现边界。116 收藏 -
用 Go 标准库 log/slog 的 WithGroup 把请求、用户和数据库字段分组,结合 TextHandler 验证输出结构,并说明 Handler 实现与常见误区。116 收藏 -
Go 使用 html/template 渲染表单时,校验失败不应只返回一句错误文本。本文用一个注册表单拆开 POST 分支、FormData 回填、字段级错误与焦点提示的调用链,并给出可回归的实现边界。116 收藏 -
Go 1.22 起可以直接对整数使用 range。本文用可运行的小例子说明 range n 实际遍历的范围、零值和负数边界、变量声明规则,以及旧版本项目如何选择兼容写法。114 收藏 -
Go 测试里临时目录、环境变量和共享资源容易在失败路径上残留。本文用 testing.T.Cleanup 拆解注册时机、后进先出顺序、子测试继承和并行测试边界,给出可运行的测试写法与验收清单。114 收藏