惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

罗磊的独立博客
Recent Announcements
Recent Announcements
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
有赞技术团队
有赞技术团队
J
Java Code Geeks
T
The Blog of Author Tim Ferriss
MyScale Blog
MyScale Blog
人人都是产品经理
人人都是产品经理
aimingoo的专栏
aimingoo的专栏
U
Unit 42
The GitHub Blog
The GitHub Blog
云风的 BLOG
云风的 BLOG
T
Tailwind CSS Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 三生石上(FineUI控件)
Apple Machine Learning Research
Apple Machine Learning Research
小众软件
小众软件
Hugging Face - Blog
Hugging Face - Blog
博客园 - 司徒正美
腾讯CDC
I
InfoQ
GbyAI
GbyAI
博客园_首页

Chenxu's Blog

写出一份好的代码 linux 的基本操作 启动我的服务 更舒适地写代码(含学生白嫖指南) RAG检索优化:从 68% 到 82.2% 学习深度学习 北邮计算机研究生选课指北 学习机器学习 上海篇 提出一个好问题 写代码的环境 选购一台合适的设备 计算机的第零课 序言 内蒙古篇 山东篇 一篇对transformers的疑惑 浅析GPUStack 浅谈后端项目分层 浙江篇 河南篇 一些三端协同的开发工具记录 浅谈编程语言中的 GC 在 Windows 上安装 Rust 美化博客 消息队列 MyBatis 现代交换原理2024年题目 回忆版 北邮计科本科课程指北 ClkLog埋点用户分析系统研究报告 大数据梧桐实验分享
手把手教你gozero从开发到部署 (5): gtodolist 之任务的删除
Chenxu · 2024-02-11 · via Chenxu's Blog

代码重构

上一章节末尾 我们增加了一个删除缓存的代码以供增加和修改任务时调用, 但是这个写法不太好. 不仅代码逻辑上不够清晰, 再调用时也会每次都需要新建一个新的ListTaskLogic对象, 对性能有一定消耗. 因此我新建了一个cache_logic.go文件专门用于操作缓存.

删除 list 缓存的代码做部分修改如下:

// DeleteListCache 删除 list 缓存
func DeleteListCache(r *redis.Redis, uid int64) {
	prefix := "cache:gtodolist:task:list:"
	listKey := fmt.Sprintf("%s%v:*", prefix, uid)
	keys, _ := r.Keys(listKey)

	for _, key := range keys {
		_, _ = r.Del(key)
	}
}

调用语句如下:

DeleteListCache(l.svcCtx.RedisClient, in.Uid)

删除任务

代码框架已经生成好, 直接填写逻辑代码即可

api 层代码, 依旧是直接调用 rpc 即可:

func (l *TaskDeleteLogic) TaskDelete(req *types.DeleteReq) (resp *types.DeleteResp, err error) {
	deleteResp, err := l.svcCtx.TaskRpcClient.DeleteTask(l.ctx, &pb.DeleteReq{
		Uid: ctxdata.GetUidFromCtx(l.ctx),
		Id:  req.Id,
	})
	if err != nil {
		return &types.DeleteResp{
			Status:  int(vo.ErrServerCommonError.GetErrCode()),
			Message: err.Error(),
			Error:   err.Error(),
		}, nil
	}

	resp = &types.DeleteResp{}
	_ = copier.Copy(resp, deleteResp)
	return resp, err
}

rpc 层代码, 先校验任务 id 是否合法, 然后删除 list 缓存和数据库内数据

func (l *DeleteTaskLogic) DeleteTask(in *pb.DeleteReq) (*pb.DeleteResp, error) {
	tid, err := strconv.ParseInt(in.Id, 10, 64)
	if err != nil {
		return nil, errors.Wrap(err, "转换任务id失败, 请传入合法id")
	}

	DeleteListCache(l.svcCtx.RedisClient, in.Uid)

	err = l.svcCtx.TaskModel.Delete(l.ctx, nil, tid)
	if err != nil && err != gormc.ErrNotFound {
		return nil, errors.Wrap(err, "删除任务失败")
	}

	return &pb.DeleteResp{
		Status:  vo.Ok,
		Message: "删除成功",
	}, nil
}

代码测试无误后至此手把手教你 gozero 从开发到部署系列 就全部完结啦