windows下golang使用protobuf

男娘i 2021-09-21 13:48 534阅读 0赞

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

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3h1ZW1lbmdydWkxMg_size_16_color_FFFFFF_t_70

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

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3h1ZW1lbmdydWkxMg_size_16_color_FFFFFF_t_70 1

protobuf的使用方法

1、基本用法

protoc —version #查看protoc的版本

2、代码转换显例

切换到要使用的proto文件路径下,并打开cmd窗口执行以下命令

protoc —go_out=. *.proto

下面写个例子说明一下,编写的proto文件内容如下

  1. syntax = "proto3";
  2. message GrpcResponse {
  3. int32 Result = 1;
  4. string Error = 2;
  5. }
  6. message GrpcRequest {
  7. string RequestType=1;
  8. int32 A = 2;
  9. int32 B = 3;
  10. }
  11. service GrpcService {
  12. rpc Add(GrpcRequest) returns (GrpcResponse) {}
  13. rpc Subtract(GrpcRequest) returns (GrpcResponse) {}
  14. rpc Multiply(GrpcRequest) returns (GrpcResponse) {}
  15. rpc Divide(GrpcRequest) returns (GrpcResponse) {}
  16. }

执行命令后,会多出一个.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

发表评论

表情:
评论列表 (有 0 条评论,534人围观)

还没有评论,来说两句吧...

相关阅读

    相关 golang使用protobuf简易教程

    golang使用protobuf简易教程 google公司发布的一套开源编码规则,基于二进制流的序列化传输,可以转换成多种编程语言,几乎涵盖了市面上所有的主流编程语言,当