Go问答技术文章
-
Golang · Go问答 | 3天前 | 标准库 · 跨平台 · 安全 · Go问答 · 文件路径 · Go path/filepath clean 路径安全 路径穿越 filepath.IsLocal
处理用户传入的文件名时,先用 filepath.IsLocal 做词法边界检查,再把通过的路径交给 filepath.Join;本文说明 Clean、绝对路径、空字符串和符号链接之间各自能解决什么问题。413 收藏 -
sync.OnceFunc 不只是把 sync.Once 包了一层:初始化函数一旦 panic,返回函数会记住同一个 panic 值,并在后续调用中再次抛出。本文用最小代码拆开执行次数、并发等待与失败缓存的边界。497 收藏 -
Go fuzzing 里,F.Add 负责把开发者已知的边界样本放进种子语料,F.Fuzz 再从这些样本出发进行覆盖引导的变异;失败输入保存到 testdata/fuzz 后,会成为后续 go test 默认执行的回归样本。311 收藏 -
Golang · Go问答 | 3天前 | 性能优化 · encoding · Go问答 · Go 1.24 · 性能 Go encoding.TextAppender MarshalText AppendText
Go 1.24 的 encoding.TextAppender 允许类型直接把文本表示追加到已有字节切片。本文用 AppendText 与 MarshalText 对比,说明何时能减少临时分配、如何保持语义一致,以及实现和基准中的边界。332 收藏 -
slog.Logger 写日志前会先询问 Handler.Enabled。把昂贵的参数构造放到级别判断之后,可以避免被过滤的日志仍然消耗 JSON 序列化、查询和字符串拼接成本。381 收藏 -
Go 的 http.Client.Timeout 覆盖整个请求生命周期,而 Transport.ResponseHeaderTimeout 只等待响应头。把两者放在一起理解,才能避免响应体读取被误判成连接超时。205 收藏 -
Go 1.22 引入的 database/sql.Null[T] 用 V 保存值、用 Valid 表示数据库 NULL。本文用可运行示例解释 Scan(nil)、Scan(0) 与 Value() 的边界,避免把零值误当成空值。102 收藏 -
Go 的 copy 返回实际复制的元素数量,通常由目标切片长度决定;当源目标切片重叠或容量被误读时,返回值和最终数据更容易被误判。本文用可运行示例拆开边界。233 收藏 -
multipart.Reader.NextRawPart 会按 MIME boundary 逐个返回 Part,并保留 quoted-printable 的原始传输编码。本文用一个带前导换行的 multipart body,说明如何区分边界前空白、Part.Read 和 io.EOF,避免把未读内容或编码差异误判成解析失败。453 收藏 -
同一个模块在两台机器上的依赖下载或交叉编译结果不一致时,go env -changed 能快速列出有效值偏离默认值的环境设置。本文把 GOENV、go env -w 与 shell 环境拆开,给出可复现的检查顺序。269 收藏 -
Golang · Go问答 | 3天前 | 标准库 · 单元测试 · 资源管理 · Go问答 · Go testing.T.Cleanup Cleanup 注册顺序 Go 子测试资源释放 testing 包
Go testing.T.Cleanup 采用后注册先执行的顺序,并且父测试的清理会等所有子测试完成后才运行。本文用嵌套测试和失败场景拆开注册时机、执行边界与资源释放写法。414 收藏 -
Go 1.27 引入泛型方法后,方法可以声明自己的类型参数,但接口方法仍不能声明类型参数。本文用 Rand.N、函数类型推断和接口边界说明如何判断代码能否编译,以及如何保留兼容性。474 收藏 -
io.Pipe 用同步内存管道连接 Reader 和 Writer。写端 CloseWithError 会把错误传给后续读取,nil 则得到 EOF;本文用一个小实验拆开写入、读取消费、错误关闭和重复关闭的边界。486 收藏 -
Go 的 net/url 会把 URL 路径解码到 Path,同时用 RawPath 保留可复原的编码提示。掌握 URL.EscapedPath 的判断规则,才能在 %2F、路径重写和请求回放场景中稳定保留原始路径语义。340 收藏 -
Go 里 iter.Seq 是惰性遍历函数,slices.Collect 会把它完整收集成切片。文章用一个分页数据场景说明如何提前停止、如何估算内存,以及什么时候不该直接 Collect。100 收藏