青训营大项目心得六|青训营笔记

188 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第6篇笔记。

借着我们青训营的契机,笔者在其中认识了一波志同道合的伙伴。我们一起组队完成项目的开发。我们小组选的的是抖音极简版的开发。

上回说到,这篇文章笔者要说说我们项目关于go-micro的一个简单的流程。首先我们从青训营大项目的接口文档中copy出proto数据文件。

syntax = "proto3";

option go_package = "../service";

package user;

service UserService {
   rpc Register (douyin_user_register_request) returns (douyin_user_register_response) {}
   rpc Login (douyin_user_login_request) returns (douyin_user_login_response){}
   rpc UserInfo(douyin_user_request) returns (douyin_user_response){}
}

message douyin_user_request {
   int64 user_id = 1; // 用户id
   string token = 2; // 用户鉴权token
}

message douyin_user_response {
   int32 status_code = 1; // 状态码,0-成功,其他值-失败
   string status_msg = 2; // 返回状态描述
   User user = 3; // 用户信息
}

message douyin_user_login_request {
   string username = 1; // 登录用户名
   string password = 2; // 登录密码
}

message douyin_user_login_response {
   int32 status_code = 1; // 状态码,0-成功,其他值-失败
   string status_msg = 2; // 返回状态描述
   int64 user_id = 3; // 用户id
   string token = 4; // 用户鉴权token
}

message douyin_user_register_request {
   string username = 1; // 注册用户名,最长32个字符
   string password = 2; // 密码,最长32个字符
}

message douyin_user_register_response {
   int32 status_code = 1; // 状态码,0-成功,其他值-失败
   string status_msg = 2; // 返回状态描述
   int64 user_id = 3; // 用户id
   string token = 4; // 用户鉴权token
}

message User {
   int64 id = 1; // 用户id
   string name = 2; // 用户名称
   int64 follow_count = 3; // 关注总数
   int64 follower_count = 4; // 粉丝总数
   bool is_follow = 5; // true-已关注,false-未关注
}

整个项目大概设计成4个服务,上文是User服务的proto数据文件。原接口文档使用的是proto2的语法,我们组员认为proto2的规则较为繁琐,于是使用proto3进行定义数据文件。在这里就展示一个服务的数据文件,下一步是要对proto文件进行编译生成go-micro中的pb文件以及pb.micro文件。

组内统一的写法是生成一个build.bat文件,用来执行proto文件的编译。

protoc --proto_path=.^
 --go_out ../service --micro_out ../service^
 user.proto

其中表示pb文件输出目录为上级目录下的service文件夹中,micro.go文件的输出目录也为上级目录下的service文件夹中。之后查看service文件夹,就可以查看到生成的pb.go和micro.go文件。很多结构体的声明以及服务的生成注册流程方法已经自动生成完毕,接下来要做的就是对于每个服务进行实例操作,把每个服务接口的方法都实现完成,就可以对该服务进行注册。关于服务的注册和初始化配置的内容我们留到下回再续。