Go语言技术文章
-
Go types.Scope.Contains 接收的是 token.Pos,不是源码行号。本文从源码分析工具的实际排查场景出发,说明为什么行号比较会误判,以及如何用 FileSet、半开区间和完整位置安全判断作用域。409 收藏 -
go/types 的 Info.Selections 只记录值上的字段和方法选择,包限定名应从 Info.Uses 中读取。本文用 AST 和类型检查示例说明两类 SelectorExpr 的区别。409 收藏 -
Go SJSON 追加数组元素时,路径末尾使用 -1,例如 items.-1。本文拆开说明它与具体下标、越过数组末尾和数字对象键的区别,并给出可直接改写 JSON 的示例。408 收藏 -
Go 的 vendor 模式和模块缓存不是两份等价副本:-mod=vendor 从项目根目录的 vendor 读取,-mod=mod 才会走模块缓存。本文按命令来源、modules.txt、工作区和工具链四个边界定位结果差异。408 收藏 -
gctrace 的 clock、cpu 与堆目标各有统计口径。本文区分 STW 和并发标记、goal 与 RSS,说明先构建后采集的写法,以及日志开销、采样周期和结构化指标的边界。408 收藏 -
Go 的 archive/tar 会把 PAX 扩展头关联到后续条目。本文用 Reader.Next 顺序读取 tar,说明长路径应看 Header.Name,自定义 PAX 键值应看 Header.PAXRecords,并列出格式判断和兼容边界。408 收藏 -
系统证书环境变量改变后,应区分根证书来源与平台验证路径。本文说明 Go 1.27 的平台行为变化,以专用根池示例明确客户端信任边界,并提醒不要通过关闭 TLS 验证恢复连通。408 收藏 -
Go 1.26 的 EncryptOAEPWithOptions 可以分别设置 OAEP 主哈希和 MGF1 哈希。本文按 Hash、MGFHash、label 与 RSA 模长四项参数,说明 Go 与 Java、OpenSSL 等对端如何建立可排查的 RSA-OAEP 互操作契约。408 收藏 -
Go Doublestar 的 **.md 与 *.md 一样只匹配单个文件名段,递归应使用 **/*.md。结合内存文件树示例,说明双星号位置、零层目录、Match 与 Glob 路径基准及空结果的区别。408 收藏 -
Go sync.Pool 只提供临时对象的复用机会,不承诺每次 Get 都拿回上一次 Put 的对象。本文从地址变化现象出发,解释自动清理的契约,构造最小复现,并给出清理对象、限制容量和选择替代结构的实用边界。408 收藏 -
Go 的 http.Cookie.String 会根据目标头类型选择序列化方式,并不会把结构体字段原样全部输出。本文拆解请求 Cookie 与 Set-Cookie 的属性边界、空字符串原因和可复用写法。408 收藏 -
Go 里需要一次性查看当前进程环境变量时,用 os.Environ 获取 key=value 形式的副本,再按需筛选;需要区分未设置和空值时,改用 os.LookupEnv。408 收藏 -
Go archive/zip 的 CRC 错误通常在条目完整读取到结尾时暴露,而不是在 File.Open 或 ReadCloser.Close 时返回。本文用 io.Copy、zip.ErrChecksum 和双层资源关闭说明如何准确识别损坏压缩条目。407 收藏 -
Go 中需要把 []byte 交给异步任务、缓存或跨层接口时,bytes.Clone 可以复制有效数据并隔离底层数组。本文比较旧写法与新写法,并说明 nil、空切片、容量和回归测试的边界。407 收藏 -
Go time.Timer 的重置写法取决于通道语义:Go 1.23 及以后可直接 Reset,旧版则应先 Stop,并在返回 false 时用非阻塞接收排空潜在旧值。本文还说明 go.mod、GODEBUG、单一拥有者和 AfterFunc 的边界。407 收藏