V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
joesonw
V2EX  ›  分享创造

分享一个合并 protobuf 的小工具

  •  2
     
  •   joesonw · 2023-05-11 12:14:24 +08:00 · 1730 次点击
    这是一个创建于 566 天前的主题,其中的信息可能已经有所发展或是发生改变。

    https://github.com/joesonw/oneproto

    用来把多个 protobuf 合并为一个(如果 package 不同,通过 nested message 来区别命名空间)

    用来解决项目大了, protobuf 之间难免会产生相互引用. 但是放在不同的文件中, 维护性又更好, 于是产生了这个小工具

    例子

    user.proto

    syntax = 'proto3';
    option go_package = 'generated/proto;pb';
    
    package example.com.users;
    
    import "proto/group.proto";
    
    message User {
        string id = 1;
        string name = 2;
        string email = 3;
        string password = 4;
        string created_at = 5;
        string updated_at = 6;
        repeated groups.Group groups = 7;
    }
    

    group.proto

    syntax = 'proto3';
    option go_package = 'generated/proto;pb';
    
    package example.com.groups;
    
    import "proto/user.proto";
    
    message Group {
      string name = 1;
      repeated users.User users = 2;
    }
    

    产生的文件

    syntax = 'proto3';
    option go_package = 'generated/proto;pb';
    
    package example.com;
    
    message groups {
        message Group {
            string name = 1;
            repeated users.User users = 2;
        }
    
    }
    
    message users {
        message User {
            string id = 1;
            string name = 2;
            string email = 3;
            string password = 4;
            string created_at = 5;
            string updated_at = 6;
            repeated groups.Group groups = 7;
        }
    
    }
    

    希望能帮助到有需要的人

    2 条回复    2024-11-26 11:11:31 +08:00
    taofoo
        1
    taofoo  
       2023-05-14 20:26:52 +08:00
    这两个我弄 swagger 的 Openapi.yaml 文件做过类似的 哈哈
    424778940
        2
    424778940  
       1 天前
    能说一下具体用法吗? template 的作用是?

    我这边这样用最后得到的 msg.proto 跟 temp_messages.proto 内容一模一样
    oneproto -T temp_messages.proto -O msg.proto -P sss.sss.messages -I. -I../../../../common/protob 1.proto 2.proto
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1224 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 23:29 · PVG 07:29 · LAX 15:29 · JFK 18:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.