Go语言技术文章
-
连续调用 slices.Delete 时不要继续照搬旧下标。本文用反向删除和区间合并两种方案处理索引偏移,并说明边界检查、排序与容量复用的注意点。126 收藏 -
Go scanner.Scanner 本身没有 Filename 字段,词法错误中的文件名来自 Scanner.Init 使用的 token.File。本文说明如何用 FileSet.AddFile 设置逻辑源文件名,并通过 ErrorHandler 或 ErrorList 输出带文件名、行号和列号的诊断。126 收藏 -
Go encoding/json/v2 默认拒绝重复成员名,可用 AllowDuplicateNames 明确严格或兼容策略。示例说明对象入口、空输入处理、局部结果隔离及旧数据导入边界。126 收藏 -
slices.Compact 会在原有切片上合并连续重复元素并返回缩短后的切片。本文说明如何接住返回值、判断底层缓冲是否复用,以及指针元素和容量边界的处理方式。125 收藏 -
httputil.ReverseProxy 的 ErrorHandler 专门接管后端请求失败和 ModifyResponse 返回的错误。本文说明默认 502 的触发范围,给出可脱敏记录请求上下文、区分取消与上游不可达的自定义处理器,并说明响应已写出和 body 复制失败时的边界。125 收藏 -
Go 先用 filepath.EvalSymlinks 检查,再调用 os.Open,仍可能因检查与使用之间的 TOCTOU 竞态打开意外文件。本文区分 IsLocal、EvalSymlinks 与目录根约束,并给出 Go 1.24+ 的 os.OpenInRoot、os.Root 迁移写法。124 收藏 -
本文围绕 slices.Compact 解释如何判断输入是否满足使用边界:识别连续重复、空切片、单元素和非连续重复,并说明返回长度、底层数组复用与尾部清零的影响。123 收藏 -
用 Go slices.Chunk 把大切片按固定大小分批,覆盖尾批次、空输入、非法批大小和子切片生命周期。123 收藏 -
Go工具链升级后出现编译、测试或运行行为变化时,固定源码和依赖,用新旧工具链建立对照,区分模块声明、兼容默认值与环境差异,并保存可复现的定位记录。122 收藏 -
通过 go env -json 导出指定环境字段,并用 Python 按键读取。说明退出码与 stdout、stderr 的分离,CGO_ENABLED 字符串判断、失败后保存策略,以及配置快照与环境还原的区别。122 收藏 -
解释 maps.Clone 不能直接读取文件,结合 Go 1.24 的 os.OpenRoot 与 Root.Open 在受限根目录内读取相对路径,再按需生成 map 快照并处理字节切片的浅克隆问题。120 收藏 -
Go mime/multipart.Reader 本身按部件遍历 multipart 数据,单个文件部件的大小上限要在读取当前 Part 时用 limit+1 哨兵判断。本文给出内存读取、流式落盘和请求总量限制的组合写法,说明超限后的清理与部件切换边界。120 收藏 -
Go context.Cause 看起来不稳定,通常不是 Cause 随机变化,而是父子 context 的第一次取消顺序、CancelCauseFunc 调用时机或超时 API 选择不明确。本文用最小代码拆开 Err、Cause、取消顺序和并发入口,给出可复查的排查方式。118 收藏 -
Go 的 os.UserHomeDir 不是无条件返回一个目录:Unix 通常读取 HOME,Windows 读取 USERPROFILE,期望变量缺失时可能返回平台默认值,也可能返回非 nil error。本文用 CI 场景说明如何复现、处理和测试这个边界。118 收藏 -
Go url.ParseQuery 看起来不生效,通常不是函数没有解析,而是传入了完整 URL、忽略了 error,或把多值参数当成单值读取。本文从输入格式、url.Values、多值参数和异常编码四个边界给出排查与封装写法。118 收藏