Go语言技术文章
-
Go flag.Func 的回调返回 error 后,退出动作通常来自默认的 ExitOnError,而不是回调函数本身。本文拆解解析链路,并给出 ContinueOnError 的可控处理方案。450 收藏 -
讲清 Go io.PipeWriter.CloseWithError 如何把生产端错误传给读端,覆盖 Close、EOF、部分数据、Read 循环和关闭顺序等关键边界。478 收藏 -
Go flag.TextVar 同时连接 TextUnmarshaler 和 TextMarshaler:前者解析命令行输入,后者生成默认展示文本。本文用自定义类型说明接收者、类型匹配、帮助输出和错误处理边界。404 收藏 -
Go flag.Visit 只遍历解析时被显式设置的参数,适合区分用户输入和默认值。本文说明 Visit 与 VisitAll 的差异、零值和布尔值边界、重复设置处理,以及子命令 FlagSet 的正确用法。168 收藏 -
errors.Unwrap 只调用 Unwrap() error,因此不会拆开 errors.Join 产生的 Unwrap() []error。本文说明单链与错误树的区别,以及 Is、As 和显式枚举的正确用法。364 收藏 -
Go 的 FlagSet 能为每个子命令建立独立参数空间。本文通过 ContinueOnError、纯解析函数和表驱动测试,讲清命令分派、错误输出与业务执行如何解耦。345 收藏 -
errors.Is 只在第一个参数的错误树上匹配:比较当前节点、调用当前节点的 Is(target),再展开子错误。本文解释为何目标值的 Is 不会被反向调用,并给出正确的自定义匹配方式。301 收藏 -
Go flag.Func 可以把字符串解析、业务校验和错误返回集中在回调中。本文用环境参数示例说明先校验后赋值、FlagSet 错误策略、重复参数行为和表驱动测试。214 收藏 -
errors.As 的 target 不是普通比较值,而是接收匹配错误的可写槽位。本文用最小实验解释双指针写法、三个 panic 条件、错误树匹配规则,以及新版 errors.AsType 的替代方式。458 收藏 -
flag.TextVar 可以把命令行文本直接交给自定义类型的 UnmarshalText。本文以 LogLevel 为例,说明接口分工、默认值写法、错误处理,以及如何把同一解析规则复用于 JSON 配置。394 收藏 -
errors.Join 的多行结果不是 fmt 额外插入的换行,而是标准库按每个子错误的 Error 文本逐项拼接的结果。本文说明格式化原因、错误树判断方式,以及日志和接口层的迁移边界。421 收藏 -
Go Decoder.DisallowUnknownFields 只保证遇到未知结构体字段时返回错误,并不负责收集全部错误。本文解释首个错误的保存机制,并给出严格解码与顶层批量提示方案。261 收藏 -
Go 自定义错误可实现 Is(error) bool,将多个动态错误码映射为稳定错误族。本文用可重试与资源不存在示例说明浅比较、错误包装和表驱动测试。239 收藏 -
解释 Go json.RawMessage 的字节所有权边界,区分 Unmarshal 已复制和直接切片转换未复制的场景,并给出长期保存原始 JSON 的安全写法。330 收藏 -
errors.As 不只匹配具体错误类型,也能匹配错误链中实现某个接口的错误。声明接口变量并把其地址传入 errors.As,即可按能力处理不同实现,同时保留多层包装上下文。213 收藏