跟着开源项目学GO(13)
「这是我参与2022首次更文挑战的第28天,活动详情查看:2022首次更文挑战」
生命不息,学习不止
题外话
今天是周六啦,终于放假了,我就问还有谁,疫情怎么像赖皮虫一样,反反复复,本来都预约了门票打算明天去看展,结果因为疫情的关系,展都取消了,都赖新冠肺炎,他买菜必涨价。
废话不多说,上货
开源项目——go-gin-api
go-gin-api
这是一个主要以gin框架为主,包含了一些常用功能,包括日志,菜单,权限,代码生成的功能的一个项目。
需求回顾
上回咱们确定了这个项目的第二个小需求:调整管理员列表数据的展示顺序,调整为升序排序。
并根据前端框架请求的api\admin\list接口找到了func_list.go文件,看到List()方法,并通过注解了了解了方法的参数与返回值.并讲解了序列化与反序列化。
今天我们继续
func_list.go文件解析
上回已经说到了通过调用context上下文的ShouldBindForm反序列化函数将参数反序列化并赋值给了参数体req。
随后便是一个错误判断,构建了http错误码和自定义错误码。
大家可以在internal\code\zh-cn.go找到错误码代表的错误信息,如下
回到List函数,紧接着就是分页的一个简单业务处理,然后便是构建并声明一个查询体,查询体的定义如下
然后便是将查询体传入 h.adminService.PageList函数,PageList()方法的实现在internal\services\admin\service_pagelist.go中,如下
首先还是分页业务处理,随后便是通过admin.NewQueryBuilder()构建查询参数体,具体定义如下
order []string //排序顺序
where []struct { //where 后面接的条件
prefix string //参数
value interface{} //值
}
limit int //选取数据数量(查几条数据)
offset int //跳过数据数量(从第几行开始)
构建好查询体就可以查询了,调用QueryAll()函数执行构建好的查询语句,
QueryAll()函数实现如下,可以发现最终是使用Find()函数执行
Find()函数实现如下
可以看到最终使用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
更改如下,
listData, err = qb.
Limit(pageSize).
Offset(offset).
OrderById(true). //这里
QueryAll(s.db.GetDbR().WithContext(ctx.RequestContext()))
if err != nil {
return nil, err
}
我们来验证一下,我们可以看到改动生效了,需求完成
下回预告
func_list.go文件的解析还没有完事,下回咱们继续!!奥里给
下一篇就讲,敬请期待
大家看完发现有什么错误,写在下面吧!跟我黑虎阿福比划比划!
跟着开源项目学GO(12)
转载自:https://juejin.cn/post/7068947600262561829