当前位置: 首页 > 工具软件 > code-gen > 使用案例 >

grpc, protobuf, protoc-gen-go配置完整教程

华宪
2023-12-01

grpc, protobuf, protoc-gen-go配置完整教程

  • windows版:

    1. golang下载:https://www.topgoer.com/ 看这个网站的golang下载. 不用下载别的, 就下载golang就行.
    2. 配置环境:
    • 配置GOPATH 看这个网站就行https://www.topgoer.com/
    • 配置GOPROXY=http://goproxy.io,direct
    • 配置GO111MODULE=on
    1. 下载grpc:
    • go get -u github.com/golang/protobuf/{proto,protoc-gen-go}

    • 这步是下载proto-gen-go

    • go get github.com/golang/protobuf/protoc-gen-go

    • go get github.com/golang/protobuf/proto

    • 以上三个都输入一遍

    • 之后会发现$GOPATH/bin下面有了protoc-gen-go, 然后还差protoc没下载.

    • https://github.com/protocolbuffers/protobuf/releases/tag/v3.9.0

    • 去这里下载, 下载之后会是一个zip包, 里面只有 .zip/bin/protoc.exe有用, 把它复制到$GOPATH/bin

    • 把$GOPATH/bin加入到PATH中

    • 然后输入go get -u google.golang.org/grpc

    • 你看着它下载完了, 但是 G O P A T H / s r c 中 什 么 文 件 也 没 有 , 不 要 慌 , 你 下 载 的 文 件 全 部 都 在 GOPATH/src中什么文件也没有, 不要慌, 你下载的文件全部都在 GOPATH/src,,GOPATH/pkg/mod中了.

    • 怎么import(引用) $GOPATH/pkg/mod中的文件呢?

    • https://juejin.cn/post/6854573210508853255 看这个网站.

    1. go mod
    • GO111MODULE=off,go命令行将不会支持module功能,寻找依赖包的方式将会沿用旧版本那种通过vendor目录或者 GOPATH模式来查找。

    • GO111MODULE=on,go命令行会使用modules,而一点也不会去GOPATH目录下查找。

    • GO111MODULE=auto,默认值,go命令行将会根据当前目录来决定是否启用module功能。这种情况下可以分为两种情形:当前目录在GOPATH/src之外且该目录包含go.mod文件当前文件在包含go.mod文件的目录下。

    • 依赖包存储位置:

      • 使用go get获取的包放在$GOPATH/src/目录下
      • 使用go mod下载的依赖包放在$GOPATH/pkg/mod/目录下,所有项目共享
    • 在你需要导入第三方包的地方,打开终端输入go mod init 你的命名

    • 然后在该文件夹会出现go.mod文件

    • 然后使用go get 你想要导入的包地址

    • 这个时候go.mod文件就会多一条你刚才导入的包

    • 然后import就成功了

  • Linux版:

    1. golang 在linux下载如windows, 看那个网站很详细了.

      • 下载之前要明白: linux是分为普通用户和root用户的.想要下载应用的全局环境, 得先进入root用户:

      • sudo su root

      • 然后会提示你输入密码.

      • 接下来就按照https://www.topgoer.com/ 下载好就可以了

      • linux的环境在文件/etc/profile中, 想要编辑得在root用户下编辑, vim /etc/profile

      • export GOPATH="/home/go"

      • export GOROOT="/home/local/go"

      • export PATH=“ P A T H : PATH: PATH:GOPATH/bin”

      • export PATH=“ P A T H : PATH: PATH:GOROOT/bin”

      • export GO111MODULE=“on”

      • export GOPROXY=“http://goproxy.io,direct”

      • 然后source /etc/profile刷新环境变量(只要开机或者更改环境变量就需要刷新)

      • 执行go env看一下go的环境

    2. grpc和protobuf, protoc-gen-go的安装:

      • go get github.com/golang/protobuf/proto

      • go get github.com/golang/protobuf/protoc-gen-go

      • go get -u github.com/golang/protobuf/{proto,protoc-gen-go}

      • 然后 go get -u google.golang.org/grpc

      • 发现 G O P A T H / b i n 下 只 有 p r o t o c − g e n − g o 而 且 GOPATH/bin下只有protoc-gen-go而且 GOPATH/binprotocgengoGOPATH/src中没有任何文件. 不要慌

      • 你下载的文件全部都在$GOPATH/pkg/mod中了

      • https://juejin.cn/post/6854573210508853255 看这个网站.

      • GO111MODULE=off,go命令行将不会支持module功能,寻找依赖包的方式将会沿用旧版本那种通过vendor目录或者GOPATH模式来查找。

      • GO111MODULE=on,go命令行会使用modules,而一点也不会去GOPATH目录下查找。

      • GO111MODULE=auto,默认值,go命令行将会根据当前目录来决定是否启用module功能。这种情况下可以分为两种情形:当前目录在GOPATH/src之外且该目录包含go.mod文件当前文件在包含go.mod文件的目录下。

      • 依赖包存储位置:

      • 使用go get获取的包放在$GOPATH/src/目录下

      • 使用go mod下载的依赖包放在$GOPATH/pkg/mod/目录下,所有项目共享

      • 在你需要导入第三方包的地方,打开终端输入go mod init 你的命名

      • 然后在该文件夹会出现go.mod文件

      • 然后使用go get 你想要导入的包地址

      • 这个时候go.mod文件就会多一条你刚才导入的包

      • 然后import就成功了

      • 然后就要安装 apt install -y protobuf-compiler (root下)

      • protoc --version (# Ensure compiler version is 3+)

      • https://grpc.io/docs/languages/go/quickstart/ (grpc官方网站)

      • 这个官网上面 协议编译器的Go 插件:
        $ go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
        $ go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
        着两条没啥用, 可以试一试反正

      • 然后安装protoc

      • https://github.com/protocolbuffers/protobuf/releases/tag/v3.9.0

      • 选择linux-64位的zip文件, 解压缩之后里面只有protoc文件有用, 把他放在$GOPATH/bin下

      • 这样$GOPATH/bin下 有protoc, protoc-gen-go, protoc-gen-go-grpc, 还有vscode的一些插件

    3. 下载vscode和里面的go插件

      • https://developer.aliyun.com/article/759454
      • sudo snap install --classic code
      • 然后在ubuntu左下角有图标, 点进去就能找到vscode.
      • vscode在下载go插件的时候可能由于权限不够 permision denied
      • 这时候就需要使用 chomd -R 777 想要开放权限的文件夹名(vscode是将go插件存放到$GOPATH/bin下)
      • https://www.jianshu.com/p/a72d2244785b
    4. 其他问题:

      • protoc-gen-go-grpc: program not found or is not executable
        • 在将.proto转成.go的时候出现protoc-gen-go-grpc: program not found or is not executable
        • 解决:
        • 检查是否安装了protoc-gen-go-grpc,没安装先安装
        • go get -u github.com/golang/protobuf/protoc-gen-go
        • 如果装了还是报错,由于默认是装在GOPATH/bin下的,但是编译好像找的路径是GOROOT,所以copy过去
        • cp protoc-gen-go /usr/local/bin/
 类似资料: