一.创建项目
1.1创建项目
在Linuxshare/cloud_center/目录下创建module项目
kratos new module -r https://gitee.com/go-kratos/kratos-layout.git
进入到module删除多余的文件
internal/data/greeter.go,internal/biz/greeter.go这个也删除掉
1.2创建module的proto
syntax = "proto3";
package api.module.v1;
import "google/protobuf/empty.proto";
option go_package = "module/api/module/v1;v1";
service Module {
rpc CreateModule (CreateModuleRequest) returns (CreateModuleReply);
rpc UpdateModule (UpdateModuleRequest) returns (google.protobuf.Empty);
rpc DeleteModule (DeleteModuleRequest) returns (google.protobuf.Empty);
rpc GetModule (GetModuleRequest) returns (CreateModuleReply);
rpc ListModule (PageInfo) returns (ListModuleReply);
}
// 分页
message PageInfo{
uint32 pn = 1;
uint32 pSize = 2;
}
message CreateModuleRequest {
int32 modCompanyid=1;
int32 modDepartid=2;
int32 modProid=3;
int32 modParentsid=4;
string modName=5;
string modAliasname=6;
string modUrl=7;
int32 modState=8;
string modIco=9;
int32 modOptid=10;
int32 modSourceId=11;
int32 authLevel=12;
}
message CreateModuleReply {
int32 modId=1;
int32 modCompanyid=2;
int32 modDepartid=3;
int32 modProid=4;
int32 modParentsid=5;
string modName=6;
string modAliasname=7;
string modUrl=8;
int32 modState=9;
string modIco=10;
int32 modOptid=11;
int32 modSourceId=12;
int32 authLevel=13;
}
message UpdateModuleRequest {
int32 modId=1;
int32 modCompanyid=2;
int32 modDepartid=3;
int32 modProid=4;
int32 modParentsid=5;
string modName=6;
string modAliasname=7;
string modUrl=8;
int32 modState=9;
string modIco=10;
int32 modOptid=11;
int32 modSourceId=12;
int32 authLevel=13;
}
message UpdateModuleReply {}
message DeleteModuleRequest {
int32 modId=1;
}
message GetModuleRequest {
int32 modId=1;
}
message GetModuleReply {}
message ListModuleRequest {}
message ListModuleReply {
int32 total = 1;
repeated CreateModuleReply data = 2;
}
创建完后,使用make api 生成proto
1.2.3生成错误的error_reason.proto
代码如下:
syntax = "proto3";使用make errors 生成错误的proto 使用之前先在makefile 添加下代码
// 定义包名
package api.kratos.v1;
import "errors/errors.proto";
// 多语言特定包名,用于源代码引用
option go_package = "module/api/module/v1;v1";
enum ErrorReason {
// 设置缺省错误码
option (errors.default_code) = 500;
// 为某个枚举单独设置错误码
USER_NOT_FOUND = 0 [(errors.code) = 404];
CONTENT_MISSING = 1 [(errors.code) = 400];
}
.PHONY: errors
# generate api proto
errors:
protoc --proto_path=. \
--proto_path=./third_party \
--go_out=paths=source_relative:. \
--go-errors_out=paths=source_relative:. \
$(API_PROTO_FILES)
然后就可以使用make errors 了
二.修改配置文件
修改configs下的config.yaml修改后的内容如下
建立注册配置文件registry.yaml
三.具体实现
3.1创建biz层代码
代码如下:
package biz
import (
"context"
"github.com/go-kratos/kratos/v2/log"
"module/internal/domain"
)
type ModuleRepo interface {
CreateModule(context.Context, *domain.Module) (*domain.Module, error)
UpdateModule(ctx context.Context, module *domain.Module) (bool, error)
DeleteModule(ctx context.Context, id int32) (bool, error)
GetModule(ctx context.Context, id int32) (*domain.Module, error)
ListModule(ctx context.Context, pageNum, pageSize int) ([]*domain.Module, int, error)
}
type ModuleUsecase struct {
repo ModuleRepo
log *log.Helper
}
// NewModuleUsecase .
func NewModuleUsecase(repo ModuleRepo, logger log.Logger) *ModuleUsecase {
return &ModuleUsecase{
repo: repo,
log: log.NewHelper(logger),
}
}
// Create .
func (m *ModuleUsecase) Create(ctx context.Context, module *domain.Module) (*domain.Module, error) {
return m.repo.CreateModule(ctx, module)
}
// UpdateModule .
func (m *ModuleUsecase) UpdateModule(ctx context.Context, module *domain.Module) (bool, error) {
return m.repo.UpdateModule(ctx, module)
}
// DeleteModule .
func (m *ModuleUsecase) DeleteModule(ctx context.Context, id int32) (bool, error) {
return m.repo.DeleteModule(ctx, id)
}
//GetModule .
func (m *ModuleUsecase) GetModule(ctx context.Context, id int32) (*domain.Module, error) {
return m.repo.GetModule(ctx, id)
}
// ListModule.
func (m *ModuleUsecase) ListModule(ctx context.Context, pageNum, pageSize int) ([]*domain.Module, int, error) {
return m.repo.ListModule(ctx, pageNum, pageSize)
}
在biz.go添加如下配置
3.2创建service层
service层的代码如下:
package biz
import (
"context"
"github.com/go-kratos/kratos/v2/log"
"module/internal/domain"
)
type ModuleRepo interface {
CreateModule(context.Context, *domain.Module) (*domain.Module, error)
UpdateModule(ctx context.Context, module *domain.Module) (bool, error)
DeleteModule(ctx context.Context, id int32) (bool, error)
GetModule(ctx context.Context, id int32) (*domain.Module, error)
ListModule(ctx context.Context, pageNum, pageSize int) ([]*domain.Module, int, error)
}
type ModuleUsecase struct {
repo ModuleRepo
log *log.Helper
}
// NewModuleUsecase .
func NewModuleUsecase(repo ModuleRepo, logger log.Logger) *ModuleUsecase {
return &ModuleUsecase{
repo: repo,
log: log.NewHelper(logger),
}
}
// Create .
func (m *ModuleUsecase) Create(ctx context.Context, module *domain.Module) (*domain.Module, error) {
return m.repo.CreateModule(ctx, module)
}
// UpdateModule .
func (m *ModuleUsecase) UpdateModule(ctx context.Context, module *domain.Module) (bool, error) {
return m.repo.UpdateModule(ctx, module)
}
// DeleteModule .
func (m *ModuleUsecase) DeleteModule(ctx context.Context, id int32) (bool, error) {
return m.repo.DeleteModule(ctx, id)
}
//GetModule .
func (m *ModuleUsecase) GetModule(ctx context.Context, id int32) (*domain.Module, error) {
return m.repo.GetModule(ctx, id)
}
// ListModule.
func (m *ModuleUsecase) ListModule(ctx context.Context, pageNum, pageSize int) ([]*domain.Module, int, error) {
return m.repo.ListModule(ctx, pageNum, pageSize)
}
标签:实战,int32,domain,Kratos,context,ctx,module,Module,模块 From: https://www.cnblogs.com/lisus2000/p/17076436.html