protobuf之导入其他proto文件

本文详细介绍了在Protobuf中如何正确地导入和使用其他文件中的消息类型,包括基本的导入方式、使用方法以及常见的错误处理,特别是关于importpublic关键字的使用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      场景:假如有文件hundredbulls.proto,需要导入另一个文件common.proto,两者在同一个目录中.

  • 导入方式

          在hundredbulls.proto文件的开头,使用关键字import导入另一个文件,如下↓↓↓↓↓↓↓

          

  • 使用方式

          假设在common.proto中定义了一个枚举类型GameStatus,如下↓↓↓↓↓↓

          

          在hundredbulls.proto文件中使用GameStatus,如下↓↓↓↓↓↓

          

            即:包名.消息或类型名称

 

  • 注意事项

         1、hundredbulls.proto中只能访问在common.proto中定义的消息或类型,无法访问在common.proto内import的其他proto文件里定义的消息或类型,即:只能访问直接import的proto文件里的类型或消息;

         2、使用import public关键字可以解决上述问题,即:如果在common.proto内使用import public关键字导入其他proto文件,那么在导入common.proto的proto文件中可以访问其他proto文件;

 

         具体说明如下↓↓↓↓↓↓

         

        1>、在hundredbulls.proto导入common.proto;

        2>、在common.proto中的导入另外两个协议文件:

         

        注意关键字的不同。

      3>、在maincity.proto中定义了一个消息类型

             

      4>、在hundredbulls.proto中使用map/maincity.proto中定义的消息:

             

      5>、编译

[apple@localhost ~]$ protoc --cpp_out=./IMPORT_DEMO/ -I./IMPORT_DEMO ./IMPORT_DEMO/*.proto

[libprotobuf WARNING google/protobuf/descriptor.cc:5411] Warning: Unused import: "common.proto" imports "map/maincity.proto" which is not used.
hundredbulls.proto:22:14: "game.maincity.MapPos" seems to be defined in "map/maincity.proto", which is not imported by "hundredbulls.proto".  To use it here, please add the necessary import.

          其中第二个错误提示:在hundredbulls.proto文件中未导入maincity.proto文件中定义的MapPos

     6>、解决: 使用import public导入第三文件!

  • import搜索路径

          在使用protoc编译时,需要使用选项-I或--proto_path通知protoc去什么地方查找import的文件,如果不指定,protoc将会在当前目录(即调用protoc的路径)下查找。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值