天天看点

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

windows下golang使用protobuf

将下载下来的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 目录下,也需要将这个目录加入到环境变量中。

windows下golang使用protobuf

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