go生成protoref
方法一
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
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。