sonic.Unmarshal 对 nil 指针 panic 是设计选择强制暴露空值误用time.Time 默认序列化为纳秒整数需手动注册格式CGO 未启用会导致性能下降GetByPath 路径错误静默返回 nil须先 TypeSafe() 判断。sonic.Unmarshal 为什么 panic 而不是返回 error因为 sonic.Unmarshal 默认对 nil *struct{}、nil []T 或未初始化的指针直接 panic不像标准库那样输出 null 或静默跳过。这不是 bug是设计选择——用 panic 强制暴露空值误用避免隐式错误扩散。常见错误现象panic: cannot unmarshal into nil pointer 出现在你传了 v 但 v 是未初始化的 *MyStruct。实操建议解码前显式判空或统一用 sonic.Config{NoNullSliceOrMap: true} 初始化配置若必须兼容标准库行为改用 sonic.UnmarshalString 手动检查字符串是否为空注意这个 panic 不会被 recover() 捕获底层是 C 异常转 Go panic所以别指望 defer recover 处理它time.Time 序列化出来是数字而不是时间字符串sonic.Marshal 默认把 time.Time 当作纳秒整数序列化输出类似 1711909281000000000而非 RFC3339 格式。这是性能取舍——跳过格式化节省 3–5μs/次但业务上几乎总是错的。原因在于 sonic 不自动注册任何时间格式器而标准库内置了 RFC3339Nano。立即学习“go语言免费学习笔记深入” RedClaw 百度推出的手机端万能AI Agent助手