Go问答技术文章
-
Go 测试容易因临时文件残留、环境变量串值而偶发失败。本文整理 t.TempDir、t.Setenv 和 t.Cleanup 的使用顺序、并行限制和检查清单,让测试资源能自动收口。245 收藏 -
Golang · Go问答 | 1个月前 | golang · 配置管理 · regexp · Go问答 · Go regexp.Regexp.MarshalText UnmarshalText 正则配置 文本序列化
regexp.Regexp 可以通过 MarshalText 保存为正则表达式文本,再由 UnmarshalText 调用 Compile 恢复。本文核对序列化内容、非法模式的错误边界,以及 POSIX 和 Longest 模式无法完整保留的限制。245 收藏 -
Go workspace 中 replace 能让多模块联调通过,但单模块构建仍可能因 GOWORK、require、module 路径和本地目录边界失败。本文给出分层排查与独立构建检查方法。245 收藏 -
Go 里 range channel 一直不退出,通常不是 range 语法错,而是发送方完成后没有关闭 channel。本文用一个最小生产者消费者示例拆清关闭责任,并说明多发送方、nil channel 和提前 close 的边界。245 收藏 -
解释 Go sort.SliceStable 如何保持排序键相等元素的原始顺序,对比 sort.Slice 的选择边界,并给出单字段与多字段排序示例。245 收藏 -
Go 的三索引切片 a[low:high:max] 会把结果容量固定为 max-low。把 data[:len(data):len(data)] 传给下游后,append 无法复用调用方的额外容量,但已有元素仍可被修改。245 收藏 -
Go bufio.Reader 的 UnreadByte 只能回退最近一次成功读取的一个字节;Peek、Discard 和 WriteTo 不会建立可回退状态,回退成功后也不能再次调用。把试探读取封装为 ReadByte、判断、必要时单次回退的连续协议,可避免缓冲位置错乱。245 收藏 -
Go 的 url.QueryEscape 把空格编码成加号,是查询参数采用 application/x-www-form-urlencoded 兼容语义的正常结果。本文通过最小实验说明空格、加号和 %20 的区别,并对比 QueryEscape、PathEscape 与 url.Values.Encode。245 收藏 -
Go 泛型约束并不会自动继承所有类型实参的方法。本文用类型集、方法集和指针接收者示例说明哪些调用能写、哪些必须补进约束。244 收藏 -
Go archive/tar 读取中文文件名乱码时,先区分 PAX/USTAR 的格式能力与旧系统字符集转换,再用 UTF-8 校验、明确编码转换和跨工具样本测试稳定处理。244 收藏 -
Go 1.24 为基准测试增加 testing.B.Loop,能替代手写 b.N 循环,让每次基准运行只做一次昂贵的准备和清理,也减少循环体被编译器过度优化的机会。本文对比旧写法,演示迁移步骤,并说明基准数据变化时该怎么判断。243 收藏 -
解释 Go strings.Builder.Grow 的保证范围、容量与已写入字节的关系,以及 String 返回值和后续写入之间容易误判的边界。243 收藏 -
围绕 strings.CutLast 的空分隔符、未命中和末尾分隔符场景,解释 found 返回值与 LastIndex 兼容实现的判断边界。243 收藏 -
Go copy 没有复制出数据,常见原因是目标切片只有 cap 没有 len。本文解释 copy 的复制边界,并给出覆盖、追加和回归检查的正确写法。243 收藏 -
io.SectionReader 用 Size 报告固定区间长度,用 ReadAt 按区间内偏移读取;分片下载先校验块范围,再把相对偏移交给 ReadAt,才能避免越界和错误重试。242 收藏