Go问答技术文章
-
fstest.TestFS 报错通常不是测试器过于严格,而是自定义 fs.FS 在路径合法性、目录元数据、文件重复读取、expected 清单或并发修改上没有满足 io/fs 约定。本文用 MapFS 拆解定位顺序和修复边界。156 收藏 -
Go fs.Glob 的设计就是忽略目录读取时的 I/O 错误,默认只把非法匹配模式作为返回错误。本文拆解 GlobFS 与 ReadDir 分支,并给出用 WalkDir 保留目录错误的处理方案。427 收藏 -
解释 Go fs.Sub 为什么拒绝包含 .. 的路径,拆解 ValidPath 规则,并比较 embed.FS、os.DirFS、os.Root 的适用边界与排错方法。433 收藏 -
讲清 Go fs.WalkDir 中 SkipDir 与 SkipAll 的区别:目录剪枝、普通文件上的特殊语义、全局提前结束、普通错误和上下文取消的正确处理方式。283 收藏 -
解释 Go io.TeeReader 如何同步把读取内容写入旁路 Writer,以及写入失败为何会从 Read 返回,并给出 n、err、部分写入和重试边界。298 收藏 -
解释 Go io.Pipe 的 CloseWithError 为什么保留首个错误,梳理读写两端传播方向、nil 语义和安全关闭模式。238 收藏 -
用最小示例解释 Go io.MultiWriter 遇到目标短写时为何返回 io.ErrShortWrite、停止后续写入,以及如何避免重试导致的数据错位。470 收藏 -
解释 Go SectionReader.ReadAt 为什么会同时返回有效数据和 io.EOF,拆解区间边界、偏移换算与 ReaderAt 契约,并给出避免丢失尾部字节的正确判断顺序。384 收藏 -
解释 Go flag.VisitAll 为什么会枚举未显式设置的默认参数,对比 Visit 的实际设置集合,并给出完整配置带设置标记的可靠写法。454 收藏 -
ContinueOnError 只让 FlagSet.Parse 返回错误,并不关闭 Usage 或诊断输出。本文拆解 FlagSet 的错误策略、Usage 回调和 Output,并给出静默、捕获及自定义帮助的写法。471 收藏 -
Go flag.Func 的回调返回 error 后,退出动作通常来自默认的 ExitOnError,而不是回调函数本身。本文拆解解析链路,并给出 ContinueOnError 的可控处理方案。450 收藏 -
Go flag.TextVar 同时连接 TextUnmarshaler 和 TextMarshaler:前者解析命令行输入,后者生成默认展示文本。本文用自定义类型说明接收者、类型匹配、帮助输出和错误处理边界。404 收藏 -
errors.Unwrap 只调用 Unwrap() error,因此不会拆开 errors.Join 产生的 Unwrap() []error。本文说明单链与错误树的区别,以及 Is、As 和显式枚举的正确用法。364 收藏 -
errors.Is 只在第一个参数的错误树上匹配:比较当前节点、调用当前节点的 Is(target),再展开子错误。本文解释为何目标值的 Is 不会被反向调用,并给出正确的自定义匹配方式。301 收藏 -
errors.As 的 target 不是普通比较值,而是接收匹配错误的可写槽位。本文用最小实验解释双指针写法、三个 panic 条件、错误树匹配规则,以及新版 errors.AsType 的替代方式。458 收藏