V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
horro
V2EX  ›  Go 编程语言

Go protobuf 反射的问题:如何根据 proto 路径动态地拿到解析后的值?

  •  
  •   horro · 15 小时 40 分钟前 · 368 次点击

    前端入参:

    {
      proto_path:"path1/path2",
      message_name: "message1",
      field_path:"field1.field2"
    }
    

    后端

    proto/
    ├── path1/
    │   ├── path2/
    │   │   ├── proto1/
    │   │   │   └── proto1.pb.go   // proto1 和 proto2 在经过 protoc-gen-go 转译之前同属于	
    │   │   ├── proto2/            // 名称为 path2 的 proto package, message1 位于 proto1 中
    │   │   │   └── proto2.pb.go
    │   ├── path4/
    │   │   └── message3.proto
    │   └── utils.proto
    ├── path5/
    │   └── message4.proto
    └── path6/
        └── message5.proto
    

    需要根据传入的参数来拿到对应 proto 下 message2 的值,由于 proto 比较大,无法维护路径与 message 的 go 结构体定义的映射,需要通过反射去动态取值。 对 go protobuf 反射不太熟,这个搞不太定,有无大神帮忙看看👀

    4 条回复    2025-01-17 21:27:10 +08:00
    horro
        2
    horro  
    OP
       15 小时 31 分钟前 via iPhone
    @qzzz 之前问 ai 有提过这个 registry ,但是给的代码都没用到我的 proto 定义,我就略过去了🥲
    SingeeKing
        3
    SingeeKing  
       14 小时 2 分钟前
    用 path 是不是有点奇怪,正常做法应该是用 package 的,然后在 registry 查就行

    ---

    如果是一些特殊的服务无法保证 package 唯一,那么可能唯一的办法就是写个脚本来生成了
    guanzhangzhang
        4
    guanzhangzhang  
       12 小时 34 分钟前
    github.com/jhump/protoreflect 之前写的一个逆向生成 pb 文件,用了这个库实现的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2805 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 02:01 · PVG 10:01 · LAX 18:01 · JFK 21:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.