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

其他格式: JSON · Markdown 中文 · English
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.

generic

解决方案

  1. 93% 成功率
    import _ "example.com/project/pb" // triggers init() registration
    // or explicit:
    protoregistry.GlobalTypes.RegisterMessage(paymentpb.Payment{}.ProtoReflect().Type())
  2. 88% 成功率
    opts := protojson.UnmarshalOptions{
        Resolver: protoregistry.GlobalTypes,
    }
    if err := opts.Unmarshal(data, msg); err != nil {
        return err
    }

无效尝试

常见但无效的做法:

  1. 95% 失败

    Any.Value contains a serialized message with a type prefix; direct assignment yields garbage.

  2. 60% 失败

    Works only if the caller knows the type; defeats the purpose of Any and breaks polymorphic dispatch.