Go语言技术文章
-
本文用一个原创 Go 示例说明 importer.ForCompiler 如何选择 gc、gccgo 或 source,如何配合 token.FileSet 与 go/types 读取类型信息,以及 Lookup、模块路径和 cgo 边界。246 收藏 -
Go 测试容易因临时文件残留、环境变量串值而偶发失败。本文整理 t.TempDir、t.Setenv 和 t.Cleanup 的使用顺序、并行限制和检查清单,让测试资源能自动收口。245 收藏 -
Go 1.25 将 testing/synctest 从实验功能带到标准库可用状态,本文用超时重试测试说明如何替换旧开关、检查虚拟时间语义并让 CI 稳定验收。245 收藏 -
Golang · Go教程 | 1个月前 | 标准库 · golang · 性能优化 · 接口设计 · 性能优化 Go字符串 缓冲区复用 encoding.TextAppender MarshalText
Go 1.24 的 encoding.TextAppender 让类型可以直接把文本追加到已有字节缓冲区,适合日志、协议编码和批量格式化场景。本文从 MarshalText 的临时分配问题出发,说明 AppendText 的实现边界、错误传播和可验证的基准写法。245 收藏 -
Go 泛型约束既能描述可参与运算的类型集合,也能要求调用方具备指定方法。本文用一个带 String 方法的泛型容器,拆开接口组合、~ 底层类型和方法集的边界,解释常见 cannot use 报错该怎么定位。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 多子命令程序不要把参数全部注册到全局 flag.CommandLine。本文用 flag.FlagSet 为每个子命令划分参数、错误输出和校验边界,并给出可复用的实现骨架。245 收藏 -
Go 里 range channel 一直不退出,通常不是 range 语法错,而是发送方完成后没有关闭 channel。本文用一个最小生产者消费者示例拆清关闭责任,并说明多发送方、nil channel 和提前 close 的边界。245 收藏 -
解释 Go sort.SliceStable 如何保持排序键相等元素的原始顺序,对比 sort.Slice 的选择边界,并给出单字段与多字段排序示例。245 收藏 -
用 Go 的 slices.CompactFunc 按结构体字段处理相邻重复数据,说明比较函数如何定义、为什么只保留连续数据中的第一条,以及就地修改和返回值的使用边界。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 sort.Search 在升序切片中查找 lower bound 插入点,处理重复值、首尾边界和切片扩容移动。245 收藏 -
Go 的 url.QueryEscape 把空格编码成加号,是查询参数采用 application/x-www-form-urlencoded 兼容语义的正常结果。本文通过最小实验说明空格、加号和 %20 的区别,并对比 QueryEscape、PathEscape 与 url.Values.Encode。245 收藏