go
data_error
ai_generated
true
proto:无法解析 "type.googleapis.com/pb.Payment"
proto: unable to resolve "type.googleapis.com/pb.Payment"
ID: go/proto-any-unmarshal-type-not-found
80%修复率
86%置信度
0证据数
2024-12-02首次发现
版本兼容性
| 版本 | 状态 | 引入 | 弃用 | 备注 |
|---|---|---|---|---|
| google.golang.org/protobuf v1.30+ | active | — | — | — |
根因分析
protojson 或 proto.Unmarshal 遇到 Any 消息,其内嵌 type URL 未在全局类型注册表中注册。
English
protojson or proto.Unmarshal encountered an Any message whose embedded type URL is not registered in the global type registry.
解决方案
-
93% 成功率
import _ "example.com/project/pb" // triggers init() registration // or explicit: protoregistry.GlobalTypes.RegisterMessage(paymentpb.Payment{}.ProtoReflect().Type()) -
88% 成功率
opts := protojson.UnmarshalOptions{ Resolver: protoregistry.GlobalTypes, } if err := opts.Unmarshal(data, msg); err != nil { return err }
无效尝试
常见但无效的做法:
-
95% 失败
Any.Value contains a serialized message with a type prefix; direct assignment yields garbage.
-
60% 失败
Works only if the caller knows the type; defeats the purpose of Any and breaks polymorphic dispatch.