Go语言技术文章
-
filepath.WalkDir 不会替业务自动定义目录边界。本文从根路径检查、回调错误、DirEntry 类型判断和 SkipDir 语义入手,说明怎样写出可控的目录遍历入口,并补充符号链接、操作系统分隔符和文件根节点等边界。287 收藏 -
通过请求级 ClientTrace 记录 103 Early Hints,区分信息响应与最终 Body,说明回调绑定、并发计数、错误返回的影响,以及停用观测与日志排查的方法。287 收藏 -
使用 Go os.DirFS 读取目录时,先用 fs.ValidPath 判断输入是否满足 io/fs 名称规则,再根据目录是否可信选择 os.DirFS 或 Go 1.24+ 的 os.OpenRoot。本文区分语法边界与符号链接安全边界,并给出选择表和可运行示例。286 收藏 -
go test -shuffle 暴露出结果不稳定时,先保存随机种子,再区分共享状态、并行调度和测试缓存。本文用固定种子复现问题,并给出修复后的回归命令。286 收藏 -
Go os.File.ReadAt 只负责按偏移读取,不会替你关闭文件。本文从打开点、defer Close、ReadAt 返回值和并发路径四处排查资源未释放。286 收藏 -
rsa.PrivateKey.Validate 返回错误时,不要直接修改 N、D、P、Q 等字段。本文用不泄露私钥数值的诊断代码区分字段缺失、素数乘积与 N 不一致、E 不合法和原始密钥损坏,并给出重新解析 PKCS#1/PKCS#8 的修复路径。285 收藏 -
Go reflect 修改字段时 CanSet 为 false,通常是反射值不可寻址、忘记从指针 Elem,或字段未导出。本文用结构体和 map 对照示例说明安全赋值路径与排查边界。284 收藏 -
判断 Go net/http.ResponseController 的输入边界,要确认 Writer 来源、Unwrap 包装关系和 Handler 生命周期。本文提供完整响应示例,区分 ErrNotSupported 降级与真实错误,并说明 Flush 和写期限的限制。284 收藏 -
ELF 的 NOBITS 节可以有非零逻辑 Size,却没有对应文件内容。本文给出按节类型分支的 Go 读取器,区分正常空节、无文件内容与读取失败,并说明大小预算、资源关闭及旧代码迁移注意事项。284 收藏 -
用 Go httptrace 的 DNSStart 和 DNSDone 回调单独测量一次 HTTP 请求的 DNS 解析耗时,并处理失败、缓存与并发回调边界。283 收藏 -
Go mime.WordEncoder.Encode 会把需要编码的中文主题或显示名转换成 RFC 2047 encoded-word;ASCII 普通文本则保持原样。本文说明 QEncoding、BEncoding、字符集和邮件头组装边界。283 收藏 -
database/sql 的 Scan 只会处理文档列出的常见目标类型或 Scanner。本文用自定义金额结构体构造最小复现,再通过 Scanner 处理 int64、[]byte 和 NULL,定位并修复类型转换错误。283 收藏 -
bytes.Buffer.String 返回调用时未读部分的字符串,后续 Write、Read、Reset 不会修改已经取出的 string。本文对比 String、Bytes 和 strings.Builder 的内容范围、生命周期与适用边界。282 收藏 -
围绕 Go maps.Clone 设计配置覆盖接口,区分缺失键、nil 删除与空字符串赋值,明确成功返回可写副本、非法字段错误和失败保留原配置的约定,并提供完整示例。282 收藏 -
Go httptest.ResponseRecorder.Result 返回处理器执行完成后的 http.Response 快照。本文比较记录器字段和最终响应的差异,并给出状态码、响应头、响应体的稳定读取方式。280 收藏