亲宝软件园·资讯

展开

go micro微服务proto开发安装及使用规则

夏沫的梦 人气:0

一 Protobuf介绍

Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48,162 种报文格式定义和超过 12,183 个 .proto 文件。

他们用于 RPC 系统和持续数据存储系统。Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化、或者说序列化。

它很适合做数据存储或RPC数据交换格式。可以用于即时通讯、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式

protobuf的核心内容包括:

二 安装Protobuf

1、下载

    下载所需的安装包,地址为:github.com/protocolbuf…

      下载完成之后解压

     2、将bin目录将入环境变量

    3、查看安装是否成功

    protoc  --version

三 Protobuf语法

1.1 基本规范

文件以.proto做为文件后缀,除结构定义外的语句以分号结尾

结构定义可以包含:message、service、enum

rpc方法定义结尾的分号可有可无

Message命名采用驼峰命名方式,字段命名采用小写字母加下划线分隔方式

  message SongServerRequest {
      required string song_name = 1;
  }

Enums类型名采用驼峰命名方式,字段命名采用大写字母加下划线分隔方式

  enum Foo {
      FIRST_VALUE = 1;
      SECOND_VALUE = 2;
  }

Service与rpc方法名统一采用驼峰式命名

1.2 字段规则

字段格式:限定修饰符 | 数据类型 | 字段名称 | = | 字段编码值 | [字段默认值]

限定修饰符包含 required\optional\repeated

数据类型

Protobuf定义了一套基本数据类型。几乎都可以映射到C++\Java等语言的基础数据类型

.protoC++JavaPythonGoRubyC#
doubledoubledoublefloatfloat64Floatdouble
floatfloatfloatfloatfloat32Floatfloat
int32int32intintint32Fixnum or Bignumint
int64int64longing/long[3]int64Bignumlong
uint32uint32int[1]int/long[3]uint32Fixnum or Bignumuint
uint64uint64long[1]int/long[3]uint64Bignumulong
sint32int32intintjint32Fixnum or Bignumint
sint64int64longint/long[3]int64Bignumlong
fixed32uint32int[1]intuint32Fixnum or Bignumuint
fixed64uint64long[1]int/long[3]uint64Bignumulong
sfixed32int32intintint32Fixnum or Bignumint
sfixed64int64longint/long[3]int64Bignumlong
boolboolbooleanbooleanboolTrueClass/FalseClassbool
stringstringStringstr/unicode[4]stringString(UTF-8)string
bytesstringByteStringstr[]byteString(ASCII-8BIT)ByteString

字段名称

字段编码值

字段默认值

当在传递数据时,对于required数据类型,如果用户没有设置值,则使用默认值传递到对端

1.3 service如何定义

    service SearchService {
        rpc Search (SearchRequest) returns (SearchResponse) {}
    }

1.4 Message如何定义

    syntax = "proto3";
    message SearchRequest {
        string query = 1;            // 查询字符串
        int32  page_number = 2;     // 页码
        int32  result_per_page = 3;   // 每页条数
    }

四 proto代码编写

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;
}

五 生成.go文件

-打开终端,输入以下命令:

protoc --go_out=./ --micro_out=./ ./proto/account/account.proto

效果图:

六 最后

加载全部内容

相关教程
猜你喜欢
用户评论