解决protobuf import路径的问题
网上关于protobuf import的文章不太详细,有些问题说的不全,比如import时的路径是在哪个目录中搜索的,比如:
我有一个这样的目录结构,我怎么在demo2/protoDemo2.proto文件中导入demo1/test.proto中的文件呢?
以下是protoDemo2.proto中的代码:
1 syntax="proto3"; 2 import "test.proto"; 3 package protoDemo2; 4 5 enum Book { 6 UNKNOWN = 0; 7 STUDY = 1; 8 STORY = 2; 9 TECH = 3; 10 LAUGHT = 4; 11 } 12 13 enum Food { 14 COOKIE = 0; 15 HUMBURGER = 1; 16 RICE = 2; 17 BREAD = 3; 18 } 19 20 message Test2{ 21 test.ContactBook book = 1; 22 }
可以看到我import时没用路径,只使用了test.proto。
在protoc中输入:
protoc --proto_path=./src/protobufDemo/demo1/ --proto_path=./src/protobufDemo/demo2 --go_out=./src/protobufDemo/demo2 protoDemo2.proto
执行protoc编译器生成go文件:
--proto_path: 指定了要去哪个目录中搜索import中导入的和要编译为.go的proto文件,可以定义多个,我使用了两个proto_path,第一个指定了import "test.proto"中test.proto文件的搜索目录,第二个定义了要编译的文件protoDemo2.proto文件的目录。
--go_out: 指定了生成的go文件的目录,我在这里把go文件放到了demo2这个目录中。
最后的protoDemo2.proto, 定义了我要编译的文件是哪个文件。
最后生成的go文件:
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· 趁着过年的时候手搓了一个低代码框架
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!
· 用 C# 插值字符串处理器写一个 sscanf