gRPC是由Google主导开发的RPC框架,使用HTTP/2协议并用Protobuf作为序列化工具,因此需要安装2个工具
1.安装protobuf框架
wget https://github.com/protocolbuffers/protobuf/releases/download/v3.10.0-rc1/protobuf-all-3.10.0-rc-1.tar.gz
解压后
// 改名,并移动到$GOPATH/src/github.com/protocolbuffers/
mv protobuf-all-3.10.0-rc-1 protobuf
mv protobuf $GOPATH/src/github.com/protocolbuffers/
进入protobuf目录,依次执行下面命令
// 有些命令要要加 sudo 前缀才不会报错
./configure --prefix=$INSTALL_DIR
make
make check
make install
如果 ./configure --prefix=$INSTALL_DIR 命令出现下面错误,说明缺少c++编译器,用下面命令解决
sudo yum install -y gcc+-c++
上述操作如果出现了错误,可以查看同级目录下的config.log里面的日志。比如gcc的版本过低等问题
若一切顺利,输入查看版本
protoc --version
如果报下面的错误
protoc --version
protoc: error while loading shared libraries: libprotobuf.so.21: cannot open shared object file: No such file or directory
可以用以下步骤解决
find ./ -depth -name "libprotobuf.so.21" -print
输出如下
./src/.libs/libprotobuf.so.21
以export一个临时的全局变量LD_LIBRARY_PATH,然后运行程序的时候就会去这个目录中找共享库
LD_LIBRARY_PATH的意思是告诉loader在哪些目录中可以找到共享库。可以设置多个搜索目录,这些目录之间用冒号 " : " 分隔开
export LD_LIBRARY_PATH=$GOPATH/src/github.com/protocolbuffers/protobuf/src/.libs:$LD_LIBRARY_PATH
最后输入
protoc --version
输出
libprotoc 30.10.0
go get github网速正常的用下面命令
go get -d -u github.com/golang/protobuf/protoc-gen-go
go get 网速慢的用下面的方法替代
《go get github没速度的替代方法》
之后将下载的文件包移动到 github.com/golang/protobuf,进入 protoc-gen-go 目录,执行 go install 安装
注意:如果 protoc-gen-go 安装的是 v1.3.2 版本,那么在用 go mod 做依赖包管理时,版本也要写对,不然会报错undefined: proto.ProtoPackageIsVersion3 的错误,正确写法如下
go mod 文件里的写法
github.com/golang/protobuf v1.3.2
示例:
// 编写 proto 文件
// 指定proto版本,有多个版本,3是最新版本,更轻量化,支持更多语言
syntax = "proto3";
// 定义包名
// package proto;
// 定义请求信息结构
message HelloRequest{
string name = 1;
}
// 定义响应信息结构
message HelloResponse{
string message = 1;
}
// 定义Hello服务
service Hello{
// 定义服务中的方法
rpc SayHello(HelloRequest)returns(HelloResponse){}
}
// 执行如下命令
protoc -I . --go_out=plugins=grpc:. ./hello.proto
protoc命令 各个参数的详细解释看下面地址,第一节
https://github.com/Jergoo/go-grpc-example