Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48,162 种报文格式定义和超过 12,183 个 .proto 文件。
他们用于 RPC 系统和持续数据存储系统。Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化、或者说序列化。
它很适合做数据存储或RPC数据交换格式。可以用于即时通讯、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式
protobuf的核心内容包括:
1、下载
下载所需的安装包,地址为:github.com/protocolbuf…
下载完成之后解压
2、将bin目录将入环境变量
3、查看安装是否成功
protoc --version
文件以.proto做为文件后缀,除结构定义外的语句以分号结尾
结构定义可以包含:message、service、enum
rpc方法定义结尾的分号可有可无
Message命名采用驼峰命名方式,字段命名采用小写字母加下划线分隔方式
message SongServerRequest { required string song_name = 1; }
Enums类型名采用驼峰命名方式,字段命名采用大写字母加下划线分隔方式
enum Foo { FIRST_VALUE = 1; SECOND_VALUE = 2; }
Service与rpc方法名统一采用驼峰式命名
字段格式:限定修饰符 | 数据类型 | 字段名称 | = | 字段编码值 | [字段默认值]
限定修饰符包含 required\optional\repeated
数据类型
Protobuf定义了一套基本数据类型。几乎都可以映射到C++\Java等语言的基础数据类型
.proto | C++ | Java | Python | Go | Ruby | C# |
---|---|---|---|---|---|---|
double | double | double | float | float64 | Float | double |
float | float | float | float | float32 | Float | float |
int32 | int32 | int | int | int32 | Fixnum or Bignum | int |
int64 | int64 | long | ing/long[3] | int64 | Bignum | long |
uint32 | uint32 | int[1] | int/long[3] | uint32 | Fixnum or Bignum | uint |
uint64 | uint64 | long[1] | int/long[3] | uint64 | Bignum | ulong |
sint32 | int32 | int | intj | int32 | Fixnum or Bignum | int |
sint64 | int64 | long | int/long[3] | int64 | Bignum | long |
fixed32 | uint32 | int[1] | int | uint32 | Fixnum or Bignum | uint |
fixed64 | uint64 | long[1] | int/long[3] | uint64 | Bignum | ulong |
sfixed32 | int32 | int | int | int32 | Fixnum or Bignum | int |
sfixed64 | int64 | long | int/long[3] | int64 | Bignum | long |
bool | bool | boolean | boolean | bool | TrueClass/FalseClass | bool |
string | string | String | str/unicode[4] | string | String(UTF-8) | string |
bytes | string | ByteString | str | []byte | String(ASCII-8BIT) | ByteString |
字段名称
字段编码值
1~2^32
(4294967296)字段默认值
当在传递数据时,对于required数据类型,如果用户没有设置值,则使用默认值传递到对端
service SearchService { rpc Search (SearchRequest) returns (SearchResponse) {} }
syntax = "proto3"; message SearchRequest { string query = 1; // 查询字符串 int32 page_number = 2; // 页码 int32 result_per_page = 3; // 每页条数 }
syntax = "proto3"; import "google/protobuf/timestamp.proto"; package go.micro.service.account; option go_package="/proto/account"; service Account { //登录 rpc Login(LoginRequest) returns (LoginResponse) {} //注册 rpc Register(RegisterRequest) returns (RegisterResponse) {} //查询用户信息 rpc GetUserInfo(UserIdRequest) returns (UserInfoResponse) {} //修改信息 rpc UpdateUserInfo(UserInfoRequest) returns (Response) {} //发送注册邮件 rpc SendRegisterMail(SendMailRequest) returns (SendMailResponse) {} //发送重置密码邮件 rpc SendResetPwdMail(SendMailRequest) returns (SendMailResponse) {} //重置密码 rpc ResetPwd(ResetPwdRequest) returns (Response) {} //获取权限 rpc GetUserPermission(UserIdRequest) returns (GetPermissionResponse) {} //修改权限 rpc UpdateUserPermission(UpdatePermissionRequest) returns (Response) {} //退出账号 rpc Logout(UserIdRequest) returns (Response) {} //删除账号 rpc DelUser(UserIdRequest) returns (Response) {} //禁用账号 rpc DisableUser(UserIdRequest) returns (Response) {} //启用账号 rpc EnableUser(UserIdRequest) returns (Response) {} } message UserInfoResponse{ int64 user_id = 1; string username = 2; string first_name = 3; string password = 4; int64 permission = 5; google.protobuf.Timestamp create_date = 6; google.protobuf.Timestamp update_date = 7; int64 is_active = 8; string email = 9; string last_name = 10; } message UserInfoRequest{ UserInfoResponse user_info =1; } message UserIdRequest{ int64 user_id = 1; } message Response{ string message = 1; } message RegisterRequest{ UserInfoResponse register_request = 1; string code = 2; } message LoginRequest{ string username = 1; string password = 2; } message LoginResponse{ bool is_success = 1; int64 user_id = 2; string token = 3; } message RegisterResponse{ bool is_success = 1; int64 user_id = 2; } message SendMailRequest{ string email = 1; } message SendMailResponse{ string code = 1; string msg = 2; } message GetPermissionResponse{ int64 permission = 1; } message UpdatePermissionRequest{ int64 user_id = 1; int64 permission = 2; } message ResetPwdRequest{ int64 user_id = 1; string code = 2; string password = 3; }
-打开终端,输入以下命令:
protoc --go_out=./ --micro_out=./ ./proto/account/account.proto
效果图:
以上就是go micro微服务proto开发安装及使用规则的详细内容,更多关于go micro微服务proto的资料请关注脚本之家其它相关文章!
编程 | 2023-02-24 21:36
编程 | 2023-02-21 12:51
编程 | 2023-02-21 12:47
编程 | 2023-02-21 00:15
编程 | 2023-02-21 00:08
编程 | 2023-02-20 21:46
编程 | 2023-02-20 21:42
编程 | 2023-02-20 21:36
编程 | 2023-02-20 21:32
编程 | 2023-02-20 18:12
网友评论