Go问答技术文章
-
Go 1.21 引入的 clear 可以一次删除 map 的全部元素,但它不负责并发保护,也不等于立刻把底层内存还给操作系统。本文用可运行基准拆开清空速度、复用场景和重建 map 的边界。487 收藏 -
Go 1.23 引入的 slices.Values 可以把切片暴露为 iter.Seq。本文用同一段可运行示例验证 range 消费、空切片和提前 break 的行为,并说明它与直接遍历切片的边界。487 收藏 -
Go 的 time.Time 默认通过 MarshalJSON 输出 RFC3339 字符串,时区表现为 Z 或数值偏移,纳秒来自原始时间值。本文说明如何理解默认结果,并用 Format 明确控制 API 的时区与精度。487 收藏 -
本地能通过、CI 却提示 module checksum 缺失,通常不是 Go 随机失败,而是本地缓存掩盖了缺少的 go.sum 条目,或 CI 的只读与模块下载环境不同。本文给出复现、补齐和固定构建输入的方法。487 收藏 -
Go archive/tar 会自动处理 PAX 元数据头。读取时用 Header 获取已映射的标准字段,用 Header.PAXRecords 读取自定义扩展键,并在 Next、路径和类型转换处做好兼容处理。487 收藏 -
Go error经过%w包装后不应再依赖完整字符串判断。本文区分错误文本、哨兵错误和具体类型,给出errors.Is、errors.As及多错误包装的替代方案。487 收藏 -
Go TLS 证书验证失败时,不要先关闭校验。先按 x509 错误判断主机名是否匹配,再检查 RootCAs、中间证书和系统根证书,最后用 VerifyOptions 做独立定位。487 收藏 -
Go 的 time.Parse 不使用 YYYY-MM-DD 这类占位符,而是用固定参考时间描述布局。本文从解析失败的现场出发,拆解 2006、01、02、15、04、05、MST 和 -07:00 的含义,并说明无时区输入时 Parse 与 ParseInLocation 的区别。487 收藏 -
Go exec.Command 找不到程序时,先区分父进程 PATH、命令解析和子进程 Env。本文用 LookPath、Cmd.Path 与 os.Environ 逐层排查,并说明什么时候必须改成绝对路径。487 收藏 -
区分f.Add种子、testdata文件语料与fuzz探索缓存,说明目标目录、包路径、单样本过滤及输入类型匹配,并用边界错误示例解释如何建立稳定回归。487 收藏 -
解释 Go fsnotify 的 Rename 事件为什么不能直接等同于删除,并用父目录监听、Event.Name 过滤、os.Stat 复查和短暂去抖处理编辑器原子保存。487 收藏 -
context.AfterFunc 的 stop 返回 false,不等于回调丢失;它表示回调可能已经启动,或此前已经停止。本文用连接读超时和资源清理场景拆解停止竞态、完成同步与幂等写法。486 收藏 -
encoding/base64 的 AppendEncode 会把编码结果追加到已有切片,适合复用缓冲区。本文通过可运行示例说明输出容量、尾部数据和 RawStdEncoding 的边界。486 收藏 -
os.ReadDir 和 File.ReadDir 都能遍历目录,但排序规则并不相同。本文用最小示例说明文件名排序、directory order、n 参数和分页读取的边界,避免把稳定输出误当成底层目录顺序。486 收藏 -
Go 的 url.URL.JoinPath 会合并路径、清理 ./ 和 ../,并把连续斜杠压成一个。它适合拼接已经转义的路径片段,但不能替代路径段转义;本文用源码规则解释斜杠变化和路由边界。486 收藏