跟着开源项目学GO(13)

「这是我参与2022首次更文挑战的第28天,活动详情查看:2022首次更文挑战

生命不息,学习不止

题外话

今天是周六啦,终于放假了,我就问还有谁,疫情怎么像赖皮虫一样,反反复复,本来都预约了门票打算明天去看展,结果因为疫情的关系,展都取消了,都赖新冠肺炎,他买菜必涨价。

截图_20222517032552.png

废话不多说,上货

在这里插入图片描述

开源项目——go-gin-api

go-gin-api

这是一个主要以gin框架为主,包含了一些常用功能,包括日志,菜单,权限,代码生成的功能的一个项目。

需求回顾

上回咱们确定了这个项目的第二个小需求:调整管理员列表数据的展示顺序,调整为升序排序。

并根据前端框架请求的api\admin\list接口找到了func_list.go文件,看到List()方法,并通过注解了了解了方法的参数与返回值.并讲解了序列化与反序列化。

今天我们继续

func_list.go文件解析

截图_20225426035409.png

上回已经说到了通过调用context上下文的ShouldBindForm反序列化函数将参数反序列化并赋值给了参数体req。

随后便是一个错误判断,构建了http错误码和自定义错误码。

大家可以在internal\code\zh-cn.go找到错误码代表的错误信息,如下

截图_20220226040254.png

回到List函数,紧接着就是分页的一个简单业务处理,然后便是构建并声明一个查询体,查询体的定义如下

截图_20220826040859.png

然后便是将查询体传入 h.adminService.PageList函数,PageList()方法的实现在internal\services\admin\service_pagelist.go中,如下

截图_20222026042041.png

首先还是分页业务处理,随后便是通过admin.NewQueryBuilder()构建查询参数体,具体定义如下

截图_20224626044658.png

order []string   //排序顺序
where []struct {  //where 后面接的条件
	prefix string   //参数
	value  interface{}  //值
}
limit  int //选取数据数量(查几条数据)
offset int //跳过数据数量(从第几行开始)
    
复制代码

构建好查询体就可以查询了,调用QueryAll()函数执行构建好的查询语句,

截图_20221126051147.png

QueryAll()函数实现如下,可以发现最终是使用Find()函数执行

截图_20220326050322.png

Find()函数实现如下

截图_20221226051247.png

可以看到最终使用Execute()函数执行了具体的查询语句,然后通过回调函数 callbacks将查到的数据返回。

实现需求-调整数据展示顺序

上面我们已经解析完了func_list.go文件,现在捋清了流程,我们就可以完成这次的需求了。

我们现在很确定需要调整的就是查询体中 order 这个成员变量。

我们能看到执行查询语句中,OrderById()设置了order,那我们只需要更改这个方法的实现就可以了

listData, err = qb.
	Limit(pageSize).
	Offset(offset).
	OrderById(false).  //这里
	QueryAll(s.db.GetDbR().WithContext(ctx.RequestContext()))
if err != nil {
	return nil, err
}
    
复制代码

OrderById()函数实现如下,我们可以看到传入false为降序排序,true为升序排序,所以我们只需更改OrderById()函数的传入参数为true

截图_20222026052036.png

更改如下,

listData, err = qb.
	Limit(pageSize).
	Offset(offset).
	OrderById(true).  //这里
	QueryAll(s.db.GetDbR().WithContext(ctx.RequestContext()))
if err != nil {
	return nil, err
}
复制代码

我们来验证一下,我们可以看到改动生效了,需求完成

截图_20222526052550.png

下回预告

func_list.go文件的解析还没有完事,下回咱们继续!!奥里给

下一篇就讲,敬请期待

在这里插入图片描述

大家看完发现有什么错误,写在下面吧!跟我黑虎阿福比划比划! 在这里插入图片描述 跟着开源项目学GO(12)

猜你喜欢

转载自juejin.im/post/7068947600262561829