Golang下生成protocol buffers代码以及grpc的简单教程
本教程基于Goland IDE,Golang版本为1.17.4(建议使用1.16以上版本),生成了普通的pb和grpc代码
首先使用Goland创建一个新项目prototech
接着创建两个目录pb和proto,其中proto用来存放初始的.proto文件,pb存放生成的.pb.go源代码
在proto新建一个.proto文件test.proto
在test.proto中编辑以下文本
syntax = "proto3";
package main;
option go_package = "/pb";
message CPU{
uint32 number_cores = 1;
uint32 number_threads = 2;
double max_hz_g = 3;
}
打开Terminal,安装protocol buffers的编译器,也可以直接下载最新的版本
//指定版本
go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.26
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.1
//最新版本
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
接着就可以开始编译.proto生成pg.go文件,由于我们的文件结构为:
prototech
-pb
-proto
当前的位置是/prototech,由于在test.proto中指定的go_package = “/pb”,我们可以直接将结果文件输出到pb目录下,通过修改go_package,你也可以自定义输出文件存放的位置
protoc --go-grpc_out=. proto/test.proto
可以看到在pb目录下test.pb.go文件已经生成 如果要生成grpc.pb.go文件,修改一下命令行参数就行
protoc --go-grpc_out=. proto/test.proto
如果无法直接生成grpc.pb.go,可以尝试在test.proto中添加以下代码
syntax = "proto3";
package main;
option go_package = "/pb";
message CPU{
uint32 number_cores = 1;
uint32 number_threads = 2;
double max_hz_g = 3;
}
service HelloService {
rpc Hello (CPU) returns (CPU);
}
接着继续使用 protoc --go-grpc_out=. proto/test.proto,就能在pb目录下看到了 此外还可以通过以下方法生成grpc文件,该方法不需要添加HelloService
go get -u google.golang.org/grpc
protoc --go_out=plugins=grpc:. .\proto\processor_message.proto
|