这是我参与「第三届青训营 -后端场」笔记创作活动的的第4篇笔记
在第六次课中来自字节跳动的老师为我们耐心讲解了一个用go语言实现的笔记服务demo,在课后我尝试自己复现了一遍这个demo进行学习,这里简要记录一下学习经验与心得体会。
书接上回,我们讲到了构建笔记服务项目,今天继续看其它的知识。
构建代码模板
在写好接口文件后,我们在项目主目录下使用命令
go mod init mynote
以初始化go mod。然后再使用命令
kitex -module mynote -type protobuf -service user idl/user.proto
以生成相关代码。此时,会多出kitex_gen文件夹、script文件夹、build.sh、handler.go、main.go,将除了kitex_gen文件夹之外的文件都移入cmd/user文件夹下。
note服务同理,使用命令
kitex -module mynote -service note idl/note.thrift
然后将生成的文件移入cmd/note中。
完善业务逻辑
通过kitex生成的代码模板中有大量todo需要我们完善业务逻辑,这里以cmd/user/handler.go中的CreateUser为例:
func (s *UserServiceImpl) CreateUser(ctx context.Context, req *userdemo.CreateUserRequest) (resp *userdemo.CreateUserResponse, err error) {
resp = new(userdemo.CreateUserResponse)
if len(req.UserName) == 0 || len(req.Password) == 0 {
resp.BaseResp = pack.BuildBaseResp(errno.ParamErr)
return resp, nil
}
err = service.NewCreateUserService(ctx).CreateUser(req)
if err != nil {
resp.BaseResp = pack.BuildBaseResp(err)
return resp, nil
}
resp.BaseResp = pack.BuildBaseResp(errno.Success)
return resp, nil
}
首先通过resp = new(userdemo.CreateUserResponse)创建响应,并在最后打包resp.BaseResp = pack.BuildBaseResp(errno.Success)并返回return resp, nil。
中间是我们需要具体完善的业务逻辑,首先检查用户名与密码是否有效,然后调用service.NewCreateUserService(ctx).CreateUser(req)进行进一步的操作。这里我们自然的需要在user下创建文件夹service,并创建文件create_user.go以具体处理注册逻辑。
type CreateUserService struct {
ctx context.Context
}
// NewCreateUserService new CreateUserService
func NewCreateUserService(ctx context.Context) *CreateUserService {
return &CreateUserService{ctx: ctx}
}
// CreateUser create user info.
func (s *CreateUserService) CreateUser(req *userdemo.CreateUserRequest) error {
users, err := db.QueryUser(s.ctx, req.UserName)
if err != nil {
return err
}
if len(users) != 0 { // user已存在
return errno.UserAlreadyExistErr
}
h := md5.New()
if _, err = io.WriteString(h, req.Password); err != nil {
return err
}
passWord := fmt.Sprintf("%x", h.Sum(nil))
return db.CreateUser(s.ctx, []*db.User{{
UserName: req.UserName,
Password: passWord,
}})
}
这当中又需要对数据库进行操作,需要调用db.QueryUser与db.CreateUser方法,因此我们进一步在dal层完善数据库操作逻辑...以此类推即可。
在完善剩余的业务逻辑后,我们的笔记服务就构建完成了!