Go问答技术文章
-
slices.Delete 不负责缩小底层数组或关闭文件等资源。本文区分返回值、Go 1.22 起的尾部清零、容器复制、其他引用与 Close 所有权,给出可选收缩的原创示例。134 收藏 -
go mod tidy 在本地与 CI 反复修改模块文件时,如何对齐实际工具链与源码输入,识别测试及标签依赖,并区分 go.mod 和 go.sum 的变化原因。133 收藏 -
Decoder 不负责关闭底层 Reader。通过文件与响应体的所有权、单文件函数和长期引用,区分句柄泄漏、缓冲保留与业务结果增长,并给出读取示例和指标比较方法。126 收藏 -
连续调用 slices.Delete 时不要继续照搬旧下标。本文用反向删除和区间合并两种方案处理索引偏移,并说明边界检查、排序与容量复用的注意点。126 收藏 -
Go scanner.Scanner 本身没有 Filename 字段,词法错误中的文件名来自 Scanner.Init 使用的 token.File。本文说明如何用 FileSet.AddFile 设置逻辑源文件名,并通过 ErrorHandler 或 ErrorList 输出带文件名、行号和列号的诊断。126 收藏 -
Go工具链升级后出现编译、测试或运行行为变化时,固定源码和依赖,用新旧工具链建立对照,区分模块声明、兼容默认值与环境差异,并保存可复现的定位记录。122 收藏 -
通过 go env -json 导出指定环境字段,并用 Python 按键读取。说明退出码与 stdout、stderr 的分离,CGO_ENABLED 字符串判断、失败后保存策略,以及配置快照与环境还原的区别。122 收藏 -
Go context.Cause 看起来不稳定,通常不是 Cause 随机变化,而是父子 context 的第一次取消顺序、CancelCauseFunc 调用时机或超时 API 选择不明确。本文用最小代码拆开 Err、Cause、取消顺序和并发入口,给出可复查的排查方式。118 收藏 -
Go text/template 读取多层 map 时,可以用内置 index 函数把多个键按层传入;本文说明点号取键与 index 的区别、动态键写法,以及 missingkey=error 如何让缺失字段及时返回 Execute 错误。116 收藏 -
从 GOMOD、go env、GOPROXY、GOPRIVATE 和 tidy 输入边界入手,排查 Go go mod tidy 配置没有生效的常见原因。114 收藏 -
http.ParseCookie 返回 Cookie 列表,重复名称不会自动合并。用 map[string][]string 追加同名值,同时保留原列表顺序,并说明多条请求头、空值、解析错误及业务选择规则。111 收藏 -
动态查询不能把所有列都写死成 string 或 int64。本文用 ColumnType.ScanType 生成 Rows.Scan 的指针目标,并说明 NULL、[]byte、驱动不支持类型信息和 rows.Err 的处理边界。110 收藏 -
filepath.Localize 先检查 io/fs.ValidPath,再检查目标操作系统能否表示路径。本文拆解空元素、点路径、反斜杠、冒号、NUL 与 Windows 保留名等错误边界,并给出可执行的排查顺序。108 收藏 -
go/scanner 的自定义错误处理通过 Init 的 ErrorHandler 参数注册。保存回调中的 token.Position 与消息,可保留文件名、行号、字节列及偏移;同时区分 text/scanner 的 Error 字段与 Scan 的 token 位置。107 收藏