Go语言技术文章
-
Go 项目把 interface API 迁移到泛型时,不能只看代码是否编译。本文用共享测试表、最小泛型约束和并行适配层,比较旧接口与泛型实现的输出、错误、零值和边界行为,帮助你分阶段完成迁移并保持测试等价。423 收藏 -
用 embed.FS、fs.Sub 和 html/template.ParseFS 组织 Go 默认模板,说明包内构建边界、启动阶段解析和请求执行的错误处理方式。423 收藏 -
Go 本地 replace 在 CI 失败,常见原因是主模块选择不同或替换目录缺失。本文解释相对路径基准、检出布局、Docker 构建上下文及发布边界,并给出诊断命令。423 收藏 -
Go 使用 encoding/csv 读取 CSV 时,不要把业务字段写死在 record[0]、record[1] 上。本文从列顺序变化的现象出发,演示如何读取表头、建立列名映射、按列名安全取值,并处理缺失表头、重复表头和记录列数不足等边界。423 收藏 -
Go regexp.Regexp.LiteralPrefix 返回所有匹配共享的字面前缀和完整标记。本文用固定文本、固定前缀与无共同前缀的表达式说明如何先筛选候选,再用 MatchString 完成最终判断。423 收藏 -
runtime.ReadMemStats 统计的是 Go 运行时的分配与保留情况,不等于操作系统看到的进程 RSS。本文用字段对照和 Linux 最小采集示例说明差异来源与排查路径。423 收藏 -
Golang · Go问答 | 2星期前 | 性能排查 · net/http · HTTP客户端 · Go问答 · Go net/http 连接复用 close Response.Body HTTP/1 http.Response
Go 1.27 的 HTTP/1 Transport 会在 Response.Body.Close 后异步排空未读响应体,但只在保守的大小和时间范围内尝试。本文区分 Close、业务读取和连接复用,给出只看状态码时的写法及延迟排查边界。423 收藏 -
Go 1.27 的 vet 可能提示 %w 包装了错误类型指针。本文解释值接收者、动态类型与 errors.Is/As 的关系,并给出修复和复查方法。423 收藏 -
Go io/fs 的 FileInfo.ModTime 不是直接读取宿主机文件,而是读取文件系统实现提供的元数据。本文用 fs.Stat 和 fstest.MapFS 说明如何读取、判断零值、统一展示时区,并解释虚拟文件系统为什么可能没有可靠的真实修改时间。423 收藏 -
Go atomic.Uint64.CompareAndSwap 把旧值比较和新值写入绑定为一次原子条件更新。本文对比 Load 加 Store 的竞态,给出一次尝试与带重试的写法,并说明 false、零值、多字段一致性和高竞争边界。423 收藏 -
Go regexp.Regexp.FindReaderIndex 用 io.RuneReader 搜索流式输入时,返回值是匹配区间的字节偏移而不是字符下标。本文说明 m[0]、m[1]、nil 和超前读取的含义,并给出选择其他 API 的边界。423 收藏 -
Go runtime.KeepAlive 只负责在指定调用点保持对象可达,不会修复数据竞争或非法指针。本文按资源句柄、终结器、unsafe/cgo 与并发边界拆解结果不稳定的排查方法。423 收藏 -
Go constant.Bytes 输出整数绝对值的小端字节,因此不保存负号。本文给出符号与幅值分离的编码和还原写法,说明它与补码、文本的区别,以及类型、长度、零值和跨系统转换的边界。423 收藏 -
用os.OpenRoot和Root.OpenFile在指定目录树内创建新文件,区分Create截断与O_EXCL防覆盖,并说明写入关闭错误、父目录和平台边界。422 收藏 -
区分json.Decoder读取值流时的正常EOF、截断错误与数组输入,提供复用Decoder的循环和单值尾部检查示例,说明预读缓冲、数据处理及关闭责任。422 收藏