• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

protocol buffer中的一些点(pacakge、go_package、proto依赖等)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
  1. protoc --proto_path=$GOPATH/src --proto_path=. --go_out=. ./*.proto
    a. 上面的句编译语句中,--proto_path用于表示要编译的proto文件所依赖的其他proto文件的查找位置,可以使用-I来替代。如果没有指定则从当前目录中查找。
    b. --go_out有两层含义,一层是输出的是go语言对应的文件;一层是指定生成的go文件的存放位置。
    c. --go_out=plugins=grpc:helloworld,这里使用了grpc插件。如果proto文件想在rpc中使用,可以在proto中定义接口如下:
    service SearchService {
      rpc Search(SearchRequest) returns (SearchResponse);
    }
    helloworld表示生成的文件存放地址。
  2. protoc --go_out=plugins=grpc:. --go_opt=paths=source_relative ./update.proto
    a. --go_opt表示生成go文件时候的目录选项,如上面写时表示生成的文件与proto在同一目录。
  3. import、go_package、package
    a. package主要是用于避免命名冲突的,不同的项目(project)需要指定不同的package。
    b. import,如果proto文件需要使用在其他proto文件中已经定义的结构,可以使用import引入。
    c. option go_package = "github.com/protocolbuffers/protobuf/examples/go/tutorialpb"; go_packge有两层意思,一层是表明如果要引用这个proto生成的文件的时候import后面的路径;一层是如果不指定--go_opt(默认值),生成的go文件存放的路径。
    d. 需要注意的是package和go_package的含义。在官方给的文档中,package和go_package的最后一个单词不一样:

    他们的含义分别是:package用于防止不同project之间定义了同名message结构的冲突,因为package名的一个作用是用于init方法中的注册:

    而当go_package存在时,其最后一个单词是生成的go文件的package名字:

    而当go_package不存在时,go文件件的package名字就变成了proto中package指定的名字了。

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
go关键字之struct定义声明方式发布时间:2022-07-10
下一篇:
Go操作kafka发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap