美文网首页
go生成protoref

go生成protoref

作者: yichen_china | 来源:发表于2023-09-08 19:54 被阅读0次
方法一
1. option参数

.proto文件中添加

option go_package = "./;ProtoModel";  // 对应:生成位置;包名

sendbody.proto 文件格式如下

syntax = "proto3";
option go_package = "./;ProtoModel";

message Model {
   string key = 1;
   int64 timestamp =2;
   map<string,string> data =3;
}

2 安装Go语言的protoc插件

主要是提供--go_out 支持

go install github.com/golang/protobuf/protoc-gen-go@latest

提供了一个protoc-gen-go二进制文件,当编译器调用时传递了--go_out命令行标志时protoc就会使用它。--go_out告诉编译器把Go源代码写到哪里。编译器会为每个.proto文件生成一个单独的源代码文件。

3 执行生成go文件

protoc --go_out=plugins=grpc:. .\sendbody.proto

如果没弄明白往后看

下面是更细节的流程


Protobuf安装

可以到github上搜索protobuf,第一个就是,这里也给出链接https://github.com/protocolbuffers/protobuf

image

我们还要下载Go语言对应的工具,这个工具就是上文提到的protoc,再开一眼不要嫌麻烦 https://github.com/protocolbuffers/protobuf-go

Protobuf在* .proto* 中定义结构化数据,可以通过protoc工具讲 .proto文件转化为C、Java、Golang等多种语言的代码,兼容性好,易于使用

Protobuf文件内容

消息类型(消息名采用首字母大写驼峰风格)

说了这么多,我们来看看 .proto 文件的是一个入门实例

//protobuf有两个版本,默认是proto2,如果需要proto3需要显示指定

syntax = “proto3”;

//定义包名

package main;

//message是关键字,又来指定消息类型,这里的消息类型会转换为Go语言中的结构体,我们可以看到字段被赋值,这并不是真正意义上的赋值,我们叫它数字标识符,每个字段有唯一的数字标识符,范围是 1~2^29-1

message Student {

    string  name = 1;

    bool  male = 2;

    repeated  int32 scores = 3;

}

字段类型(字段名使用小写下划线风格)

标量类型(Scalar)

以下是常见的,具体可以去Protobuf官网查看(https://developers.google.cn/protocol-buffers/

浮点型:double、float

数字型:int32、int64、uint32、uint64

布尔型:bool

字符型:string

字节数组:bytes相当于Go语言的[]byte

枚举(Enumerations)

我们通常使用关键字 enum定义枚举类型

enum MonthEnum {

JANUARY = 0;

FEBRUARY = 1;

 .....

}

消息类型间的嵌套

message Person {

    repeated   Student  student = 1;

}

message Student {

    string name = 1;

    string gender = 2;

    repeated string score = 3;

}

oneof(作用类似c里的联合体,写配置文件类似)

message Person {

  int32  height = 1;

  oneof {

        string name = 2; 

         int32  age = 3;

  }

}

map

message Maps {

    map<string, string>   id_name   = 1;

}

服务(RPC服务名和方法名,均采用首字母大写驼峰风格,但不强制哦)

如果消息类型用于远程通信RPC,我们可以在.proto文件中定义RPC服务接口,关键字为 service

/使用service关键字定义一个Keep服务,服务的参数KeepRequest,返回值KeepResponse/

service KeepService {

    rpc  Keep (KeepRequest) returns  (KeepResponse);

}

在Go语言中我们可以使用,protoc工具讲proto文件转化为对应的 .go文件

protoc --go_out=. *.proto //注意:要在protoc文件所在目录下执行该命令

如果出现一下问题应在 .proto文件中加入如下(option go_backage="./;pb";)

image image

</article>

最后编辑于 :<time datetime="2022-09-03T12:29:06.000Z">2022.09.03 20:29:06</time>

作者:卷王是怎样练成的
链接:https://www.jianshu.com/p/f332e0929efd
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相关文章

网友评论

      本文标题:go生成protoref

      本文链接:https://www.haomeiwen.com/subject/ujsdvdtx.html