likes
comments
collection
share

跟着开源项目学GO(13)

作者站长头像
站长
· 阅读数 29

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

生命不息,学习不止

题外话

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

跟着开源项目学GO(13)

废话不多说,上货

跟着开源项目学GO(13)

开源项目——go-gin-api

go-gin-api

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

需求回顾

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

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

今天我们继续

func_list.go文件解析

跟着开源项目学GO(13)

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

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

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

跟着开源项目学GO(13)

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

跟着开源项目学GO(13)

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

跟着开源项目学GO(13)

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

跟着开源项目学GO(13)

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

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

跟着开源项目学GO(13)

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

跟着开源项目学GO(13)

Find()函数实现如下

跟着开源项目学GO(13)

可以看到最终使用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

跟着开源项目学GO(13)

更改如下,

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

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

跟着开源项目学GO(13)

下回预告

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

下一篇就讲,敬请期待

跟着开源项目学GO(13)

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