该系列源码已开源:

1. 概述

第三章8
userproductcategorycartordersorder_recordorder_addresspay_info
55
5
第四章API定义5APIRPC
5RPCAPI数据依赖

如果以上设计构想不是很清楚的,可通过如下传送门查看该系列其他文章:

2. RPC定义

RPC
image
APIRPCRPC
rpc.protoRPC

用户服务

主要功能:用户登录、用户注册、用户信息、...
account.proto
syntax = "proto3";

package account;

option go_package = "./account";

message RegisterReq{
  string UserName = 1;
  string PassWord = 2;
  string UserNick = 3;
  string UserFace = 4;
  int64 UserSex = 5;
  string UserEmail = 6;
}

message LoginReq{
  string UserName = 1;
  string PassWord = 2;
}

message CommonResply{
  int64 Code = 1;
  string Message = 2;
  string Data = 3;
}

message UserInfoReq{
  string UserIdentity = 1;
}

service user{
  rpc Register(RegisterReq) returns(CommonResply);
  rpc Login(LoginReq) returns(CommonResply);
  rpc UserInfo(UserInfoReq) returns (CommonResply);
}
  • 生成命令如下:
goctl rpc protoc account.proto --go_out=./types --go-grpc_out=./types --zrpc_out=. -style go-zero 
  • 生成后的目录结构:
├── Dockerfile
├── account.go 
├── account.proto                  // proto描述文件
├── etc
│   └── account.yaml               // 配置文件
├── internal
│   ├── config
│   │   └── config.go              // 配置声明type
│   ├── logic                      // 业务逻辑
│   │   ├── login-logic.go
│   │   ├── register-logic.go
│   │   └── user-info-logic.go
│   ├── server
│   │   └── user-server.go
│   └── svc                        // logic所依赖的资源池
│       └── service-context.go
├── model                          // 数据库表模型生成
│   ├── user_model.go
│   ├── user_model_gen.go
│   ├── user_receive_address_model.go
│   ├── user_receive_address_model_gen.go
│   └── vars.go
├── types                          // request、response的struct,根据api自动生成,不建议编辑
│   └── account
│       ├── account.pb.go
│       └── account_grpc.pb.go
└── user                           // main函数入口
    └── user.go

首页服务

主要功能:首页banner图、人气推荐、商品推荐列表、...
home.proto
syntax = "proto3";

package home;

option go_package = "./home";

message BannerReq{}
message RecommendReq{}
message RankingListReq{}

message CommonResply{
  int64 Code = 1;
  string Message = 2;
  string Data = 3;
}

service home{
  rpc Banner(BannerReq) returns(CommonResply);
  rpc Recommend(RecommendReq) returns(CommonResply);
  rpc RankingList(RankingListReq) returns(CommonResply);
}
  • 生成命令如下:
goctl rpc protoc home.proto --go_out=./types --go-grpc_out=./types --zrpc_out=. -style go-zero 
  • 生成后的目录结构:
├── etc
│   └── home.yaml
├── home.go
├── home.proto
├── homeclient
│   └── home.go
├── internal
│   ├── config
│   │   └── config.go
│   ├── logic
│   │   ├── banner-logic.go
│   │   ├── ranking-list-logic.go
│   │   └── recommend-logic.go
│   ├── server
│   │   └── home-server.go
│   └── svc
│       └── service-context.go
├── model
│   ├── banner.sql
│   ├── banner_model.go
│   ├── banner_model_gen.go
│   └── vars.go
└── types
    └── home
        ├── home.pb.go
        └── home_grpc.pb.go

产品服务

主要功能:产品列表、产品详情、分类列表、...
product.proto
syntax = "proto3";

package product;

option go_package = "./product";

message GetProductsReq {
  int64 Page = 1;
  int64 PageSize = 2;
  string Search = 3;
}

message ProductReq {
  string productIds = 1;
}

message GetCateoryReq {
  int64 Pid = 1;
}

message CommonResply{
  int64 Code = 1;
  string Message = 2;
  string Data = 3;
}

service product{
  rpc Products (GetProductsReq) returns (CommonResply);
  rpc Product (ProductReq) returns (CommonResply);
  rpc Category (GetCateoryReq) returns (CommonResply);
}
  • 生成命令如下:
goctl rpc protoc product.proto --go_out=./types --go-grpc_out=./types --zrpc_out=. -style go-zero 
  • 生成后的目录结构:
├── etc
│   └── product.yaml
├── internal
│   ├── config
│   │   └── config.go
│   ├── logic
│   │   ├── category-logic.go
│   │   ├── product-logic.go
│   │   └── products-logic.go
│   ├── server
│   │   └── product-server.go
│   └── svc
│       └── service-context.go
├── product.go
├── product.proto
├── productclient
│   └── product.go
└── types
    └── product
        ├── product.pb.go
        └── product_grpc.pb.go
购物车服务支付服务订单服务

3. 结束语

本篇文章介绍说明了:

RPCrpc.proto

另外,如果你感兴趣,非常欢迎你加入,我们一起来完成这个项目,为社区献出自己的一份力。

希望本篇文章对你有所帮助,谢谢。