分享
  1. 首页
  2. 文章

protobuf 导入另一文件夹下的proto

yddeng · · 6827 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

环境: protobuf2 ,golang

项目test下 存放proto的目录结构

---test // 项目根
------ cs 
 --- cs.proto
------ ss
 --- ss.proto

cs.proto

syntax = "proto2";
package cs;
message Test{
 optional string name = 1;
}

ss.proto

syntax = "proto2";
package ss;
import "test/cs/cs.proto";
message Test{
 optional cs.Test cstest = 1;
}

ss.proto 文件引用 cs/cs.proto

  1. import 不允许使用相对路径Backslashes, consecutive slashes, ".", or ".." are not allowed in the virtual path
  2. import 导入路径应该从 根开始的绝对路径 test/cs/cs.proto

protoc 命令
protoc -I ../../ -I ./ --go_out=. *.proto // 此条命令在 ss 目录下运行,可根据自己习惯在不同地址运行,但是-I 参数需注意
-I 表示引入文件的目录路径。这里有一个坑。
比如这里的 import "test/cs/cs.proto"; 实际是从GOPATH 路径引用过来的,所以参数一应该 ../../ 到GOPATH。组合出来后就是 "../../test/cs/cs.proto" 。这样才能引用出来。
注意:可能这么写

protoc -I ../ -I ./ --go_out=. *.proto // 此条命令在 ss 目录下运行
ss.proto
import "cs/cs.proto";

组合后 "../cs/cs.proto" 。看似相对路径组合后没毛病。protoc 编译也能通过。
但是 生成的对应 cs.pb.go 文件,里的import 路径就是 "cs" 。这个go工程是编译不过的。go项目引用需要从gopath 路径过来。即 "test/cs "。

总结:

  1. proto 文件的 import 需要从 gopath 路径过来(即项目名开始的绝对路径)。
  2. protoc -I 路径需要到 gopath。

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:yddeng

查看原文:protobuf 导入另一文件夹下的proto

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
6827 次点击
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏