扫码订阅《 》或入驻星球,即可阅读文章!

GOLANG ROADMAP

阅读模式

  • 沉浸
  • 自动
  • 日常
首页
Go学习
  • Go学院

    • Go小课
    • Go小考
    • Go实战
    • 精品课
  • Go宝典

    • 在线宝典
    • B站精选
    • 推荐图书
    • 精品博文
  • Go开源

    • Go仓库
    • Go月刊
  • Go下载

    • 视频资源
    • 文档资源
Go求职
  • 求职服务

    • 内推互助
    • 求职助力
  • 求职刷题

    • 企业题库
    • 面试宝典
    • 求职面经
Go友会
  • 城市
  • 校园
推广返利 🤑
实验区
  • Go周边
消息
更多
  • 用户中心

    • 我的信息
    • 推广返利
  • 玩转星球

    • 星球介绍
    • 角色体系
    • 星主权益
  • 支持与服务

    • 联系星主
    • 成长记录
    • 常见问题
    • 吐槽专区
  • 合作交流

    • 渠道合作
    • 课程入驻
    • 友情链接
author-avatar

GOLANG ROADMAP


首页
Go学习
  • Go学院

    • Go小课
    • Go小考
    • Go实战
    • 精品课
  • Go宝典

    • 在线宝典
    • B站精选
    • 推荐图书
    • 精品博文
  • Go开源

    • Go仓库
    • Go月刊
  • Go下载

    • 视频资源
    • 文档资源
Go求职
  • 求职服务

    • 内推互助
    • 求职助力
  • 求职刷题

    • 企业题库
    • 面试宝典
    • 求职面经
Go友会
  • 城市
  • 校园
推广返利 🤑
实验区
  • Go周边
消息
更多
  • 用户中心

    • 我的信息
    • 推广返利
  • 玩转星球

    • 星球介绍
    • 角色体系
    • 星主权益
  • 支持与服务

    • 联系星主
    • 成长记录
    • 常见问题
    • 吐槽专区
  • 合作交流

    • 渠道合作
    • 课程入驻
    • 友情链接
  • 宝典简介

    • Go-gRPC 入门实践
  • 入门

    • 安装
    • gRPC简介
    • Protobuf语法
    • Protobuf⇢Go转换
  • 实践

  • 进阶

  • 多语言

  • 参考

扫码订阅《 》或入驻星球,即可阅读文章!

安装


jergoo

# 环境:

  • 操作系统:macOS 10.12.5 / Ubuntu 16.04
  • golang 版本:1.8.3
  • protobuf 版本:3.3.2
  • grpc-go 版本:1.4.2

# 准备工作

  • Linux 安装 linuxbrew (opens new window)
  • macOS 安装 homebrew (opens new window)

# protobuf

项目地址:google/protobuf (opens new window)

这里直接使用brew工具安装

$ brew install protobuf
1

brew默认会安装最新版本,执行protoc命令查看当前版本:

$ protoc --version
libprotoc 3.3.2
1
2

# grpc-go

项目地址:grpc-go (opens new window)

  • 要求golang版本 >= 1.6
$ go get -u google.golang.org/grpc
1

# golang protobuf

项目地址:golang/protobuf (opens new window)

  • 要求golang版本 > 1.4
  • 使用前要求安装protobuf编译器
$ go get -u github.com/golang/protobuf/{proto,protoc-gen-go}
1

安装protoc-gen-go到 $GOPATH/bin。 注意:该目录必须在系统的环境变量$PATH中。

如果一路没有问题的话,到此为止,需要的环境都安装好了😀。

# 编译器使用

使用protoc命令编译.proto文件,不同语言支持需要指定输出参数,如:

$ protoc --proto_path=IMPORT_PATH --cpp_out=DST_DIR --java_out=DST_DIR --python_out=DST_DIR --go_out=DST_DIR --ruby_out=DST_DIR --javanano_out=DST_DIR --objc_out=DST_DIR --csharp_out=DST_DIR path/to/file.proto
1

这里详细介绍golang的编译姿势:

  • -I 参数:指定import路径,可以指定多个-I参数,编译时按顺序查找,不指定时默认查找当前目录

  • --go_out :golang编译支持,支持以下参数

    • plugins=plugin1+plugin2 - 指定插件,目前只支持grpc,即:plugins=grpc
    • M 参数 - 指定导入的.proto文件路径编译后对应的golang包名(不指定本参数默认就是.proto文件中import语句的路径)
    • import_prefix=xxx - 为所有import路径添加前缀,主要用于编译子目录内的多个proto文件,这个参数按理说很有用,尤其适用替代一些情况时的M参数,但是实际使用时有个蛋疼的问题导致并不能达到我们预想的效果,自己尝试看看吧
    • import_path=foo/bar - 用于指定未声明package或go_package的文件的包名,最右面的斜线前的字符会被忽略
    • 末尾 :编译文件路径 .proto文件路径(支持通配符)

完整示例:

$ protoc -I . --go_out=plugins=grpc,Mfoo/bar.proto=bar,import_prefix=foo/,import_path=foo/bar:. ./*.proto
1
  • 环境:
  • 准备工作
  • protobuf
  • grpc-go
  • golang protobuf
  • 编译器使用