grpc, protobuf, protoc-gen-go配置完整教程
-
windows版:
- golang下载:https://www.topgoer.com/ 看这个网站的golang下载. 不用下载别的, 就下载golang就行.
- 配置环境:
- 配置GOPATH 看这个网站就行https://www.topgoer.com/
- 配置GOPROXY=http://goproxy.io,direct
- 配置GO111MODULE=on
- 下载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 看这个网站.
- 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版:
-
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的环境
-
-
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/bin下只有protoc−gen−go而且GOPATH/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的一些插件
-
-
下载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
-
其他问题:
- 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/
- protoc-gen-go-grpc: program not found or is not executable
-



