windows下golang使用protobuf
Posted 爆米花9958
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了windows下golang使用protobuf相关的知识,希望对你有一定的参考价值。
windows 下安装protoc与protoc-gen-go
Protobuf(Protocol Buffer)是google 的一种数据交换的格式,它独立于语言,独立于平台。google 提供了多种语言的实现:java、c#、c++、go 和 python,每一种实现都包含了相应语言的编译器以及库文件。由于它是一种二进制的格式,比使用 xml 进行数据交换快许多。(也就是说,当服务器端使用go实现,注册了api;那么客户端是python实现,通过Protobuf也可以实现远程访问)
1、protoc是Protobuf编译器,可以从github上直接下载源码,下载地址https://github.com/protocolbuffers/protobuf/releases
将下载下来的protobuf放到到 $GOPATH\\src\\golang.org\\x\\protobuf 中
2、 protoc-gen-go是go版本的 Protobuf 编译器插件,能访问网络的情况下,只需要运行
go get -u github.com/golang/protobuf/protoc-gen-go
protoc-gen-go 将自动安装到 $GOPATH/bin 目录下,也需要将这个目录加入到环境变量中。
protobuf的使用方法
1、基本用法
protoc --version #查看protoc的版本
2、代码转换显例
切换到要使用的proto文件路径下,并打开cmd窗口执行以下命令
protoc --go_out=. *.proto
下面写个例子说明一下,编写的proto文件内容如下
syntax = "proto3";
message GrpcResponse
int32 Result = 1;
string Error = 2;
message GrpcRequest
string RequestType=1;
int32 A = 2;
int32 B = 3;
service GrpcService
rpc Add(GrpcRequest) returns (GrpcResponse)
rpc Subtract(GrpcRequest) returns (GrpcResponse)
rpc Multiply(GrpcRequest) returns (GrpcResponse)
rpc Divide(GrpcRequest) returns (GrpcResponse)
执行命令后,会多出一个.pb.go的文件
包
如果一个.proto文件中有包声明,生成的源代码将会使用它来作为Go的包名,如果.proto的包名中有. 在Go包名中会将.转换为_。举例来说proto包名example.high_score将会生成Go包名example_high_score。
在.proto文件中可以使用option go_package指令来覆盖上面默认生成Go包名的规则。比如说包含如下指令的一个.proto文件
package example.high_score; option go_package = "hs";
生成的Go源代码的包名是hs。
如果一个.proto文件中不包含package声明,生成的源代码将会使用.proto文件的文件名(去掉扩展名)作为Go包名,.会被首先转换为_。举例来说一个名为high.score.proto不包含package声明的文件将会生成文件high.score.pb.go,他的Go包名是high_score。
参考:
https://zhuanlan.zhihu.com/p/83010418
https://www.jianshu.com/p/bd26be0109be
https://geektutu.com/post/quick-go-protobuf.html
https://blog.csdn.net/VBVSPER/article/details/91878373
以上是关于windows下golang使用protobuf的主要内容,如果未能解决你的问题,请参考以下文章