如何用protobufGo语言程序?

摘要:protobuf是一个附带工具生成代码并实现将结构化数据序列化的工具. 安装protobuf 参考官方文档-下载软件 在github protobuf仓库的releases页面找到新版的软件然后安装. 下载zip文件, 使用unzip指令解
protobuf是一个附带工具生成代码并实现将结构化数据序列化的工具. 安装protobuf 参考官方文档-下载软件 在github protobuf仓库的releases页面找到新版的软件然后安装. 下载zip文件, 使用unzip指令解压就可以使用了, 可执行文件在./bin文件夹下面 ./bin/ ├── bin │ └── protoc ├── include │ └── google │ └── protobuf │ ├── any.proto │ ├── api.proto │ ├── compiler │ │ └── plugin.proto │ ├── cpp_features.proto │ ├── descriptor.proto │ ├── duration.proto │ ├── empty.proto │ ├── field_mask.proto │ ├── go_features.proto │ ├── java_features.proto │ ├── source_context.proto │ ├── struct.proto │ ├── timestamp.proto │ ├── type.proto │ └── wrappers.proto └── readme.txt 需要使用go install google.golang.org/protobuf/cmd/protoc-gen-go@latest下载安装二进制可执行文件用于编译代码 first example syntax = "proto3"; option go_package = "./myproto"; package myproto; message Hello { string name = 1; } 需要一个.proto文件 这个option go_package是GO语言特定的需要的变量, 并且这个代表了go的包的名字 编译 对于一个.proto文件可以编译为二进制文件 ../bin/bin/protoc --go_out=. hello.proto 会生成一个hello.pb.go文件 编译出来的文件会使用一些GO的包, 需要使用go mod tidy安装缺失的环境 使用生成的文件 Protobuf还为每个成员生成了一个Get方法 func (x *Hello) GetName() string { if x != nil { return x.Name } return "" } 使用生成的代码进行通讯 针对server的代码 const HelloServiceName = "HelloService" type HelloService struct{} func (s *HelloService) Hello(request *myproto.Hello, reply *string) error { *reply = "Hello, " + request.GetName() return nil } 会自动反序列化成为一个可以被使用的 func (c *HelloServiceClient) Hello(request *myproto.Hello, reply *string) error { return c.Call(c.serviceName+".Hello", request, reply) } 针对客户端的使用, 因为每次rpc传输数据的时候自动调用String方法生成为字符串进行传输, 所以, 不需要手动调用, 直接给一个实现了String的接口即可. 总结 protoc编译的时候还可以生成出来grpc的代码文件, 所以, 可以帮助实现rpc的函数定义等(很方便), 但这些本质是grpc的功能, 所以这里只讲关于protoc总结编译message并且在GO中使用. 参考 GO语言高级编程