Go语言技术文章
-
Go 的 regexp.Regexp.LiteralPrefix 可以提取每个匹配必经的固定前缀。本文区分非锚定与 ^ 锚定查询,给出 Contains、HasPrefix 与 MatchString 的安全组合,并说明空前缀、完整字面量和性能收益边界。254 收藏 -
修改 Go AST 后,旧的 types.Info 不会自动重算。本文结合 AST 节点、FileSet、Info 和 Checker 的关系,说明如何判断旧结果失效,并用新的检查上下文重新获得类型信息。254 收藏 -
Go AST 文档工具解析函数结果时,不能直接把 FieldList.List 的下标当作返回值位置。本文用 NumFields 和 Field.Names 区分语法节点与语义槽位,为无名返回值生成稳定编号,并保留类型和源码行号。254 收藏 -
Go写文件时如何接住Close错误,与写入错误共同返回,并区分缓冲Flush、文件Sync和资源关闭的不同职责。254 收藏 -
Go 文件没有参与编译时,不要先反复清理缓存。用 go env 和 go list -json 查看当前模块、平台、构建标签以及 GoFiles、IgnoredGoFiles,再按文件名后缀、//go:build 和 -tags 修正文件选择条件。253 收藏 -
Go 的 IPv4-mapped IPv6 地址看起来像 IPv6,但它包裹的是 IPv4。本文用 netip.Addr 说明白名单直接比较为什么失效,并给出用 Unmap 统一规范化、保留真正 IPv6 语义的实现方式。253 收藏 -
Golang · Go问答 | 2星期前 | 字符串 · go · unicode · utf-8 · Go问答 · Go 字符串长度 UTF-8 unicode/utf8 RuneCountInString
Go 的 len(string) 统计字节,而 utf8.RuneCountInString 统计解码后的 rune 数量,所以中文和 emoji 常常出现两个结果。本文进一步说明非法 UTF-8 与用户感知字符的边界。253 收藏 -
用 Go testing/fstest.MapFS 构造内存文件,演示 ReadFile 读取指定路径,并用 errors.Is 区分非法路径、文件不存在和正常结果。253 收藏 -
Golang · Go教程 | 2星期前 | Go教程 · database/sql · database/sql Go数据库 Rows.ColumnTypes ColumnType.Nullable
Go database/sql 的 ColumnType.Nullable 返回可空值和信息是否可靠两个结果。本文说明怎样通过 Rows.ColumnTypes 读取列可空性,并正确处理驱动不支持和未知状态。253 收藏 -
Go 进程内存持续增长而 heap profile 没有明显对象时,不要直接认定是 heap 泄漏。本文区分 RSS、HeapAlloc、堆保留空间、goroutine 栈和分配 churn,并用 heap、allocs、runtime.MemStats 与 runtime/metrics 组合定位增长层。253 收藏 -
Go json.Decoder 解码到 any 时,JSON 数字默认会落到 float64。本文说明如何用 UseNumber 保留为 json.Number,再按业务边界解析成 int64 或 float64,避免大整数提前丢失精度。253 收藏 -
Go strings.Count 只统计不重叠匹配。本文用按字节起点推进的实现统计重叠子串,并说明空子串、UTF-8 与输入规模边界。253 收藏 -
区分 Go Selection.Indirect 的选择路径含义和方法声明接收者,以嵌入指针字段说明误判,并给出读取原始方法签名的辅助函数及历史行为注意事项。253 收藏 -
手工创建 go/types.Interface 时,先准备好显式方法和嵌入类型,等嵌入类型完全定义后调用 Complete,再读取 NumMethods、Method 或方法集。本文按构造、完成、查询顺序说明方法集计算时机与重复方法边界。253 收藏 -
用 Go context.WithTimeout 派生多个子任务时,理解父子取消传播、兄弟隔离、超时判断和 CancelFunc 资源释放。253 收藏