「这是我参与2022首次更文挑战的第27天,活动详情查看:2022首次更文挑战」
生命不息,学习不止
题外话
今天是周四啦,话术字节那位算法架构好可惜呀,可以说是年轻有为了,这也给我们提了个醒呀,身体很重要,广大掘友们一定要注意呀,毕竟适当摸鱼有助于身体健康不是嘛,嘿嘿嘿……
废话不多说,上货
开源项目——go-gin-api
go-gin-api
这是一个主要以gin框架为主,包含了一些常用功能,包括日志,菜单,权限,代码生成的功能的一个项目。
需求回顾
上回咱们确定了这个项目的第二个小需求:调整管理员列表数据的展示顺序,调整为升序排序。
并根据前端框架请求的api\admin\list接口找到了func_list.go文件,看到List()方法,并通过注解了了解了方法的参数与返回值.
今天我们就来实现这个需求
实现需求-调整数据展示顺序
func (h *handler) List() core.HandlerFunc {
我们先来说一下List这个方法,之前都是说函数,为什么这回说是方法了呢,Go 语言中同时有函数和方法
当一个函数包含了接收者,就可以定义为方法
为什么有这么个作用呢,我们都知道在go中不是面向对象的,类似常见的 Java。C++ 等语言中,实现类的方法做法都是编译器隐式的给函数加一个 this 指针,而在 Go 里,这个 this 指针需要明确的申明出来,其实和其它 OO 语言并没有很大的区别。
接受体h * handler定义如下,
我们主要关注 adminService admin.Service,这个其实就是定义的service层具体的Service方法,下面遇到会具体讲解
req := new(listRequest) //定义参数体
res := new(listResponse) //定义返回体
声明了参数体与返回体,定义如下,可以看到参数体的成员变量就是所需参数,返回体就是数据列表加上分页所需要的数据。
随后便是通过反序列化函数ShouldBindForm将参数反序列化并赋值给req,接口定义如下
其实就是在context.ctx.ShouldBindWith序列函数的基础上再次封装了一层,实现类如下
序列化与反序列化
序列化:在我的认值中就是将对象或结构体转换成可以传输的字节码数据。
反序列化:看字面就知道是和序列化相反的了,那就是将字节码数据转换成对象或结构体。
为什么要有这个序列化这个操作呢,我么都知道对象的声明周期是跟着程序的运行而创建,程序的停止而死亡。
但如果我想讲对象传递给其他服务,这个服务想让这个对象长久保存,也就是所谓的持久化服务。
这时就需要我们对对象或结构体做序列化处理,传递出去,然后做持久化的服务将数据反序列化转换成结构体保存。
下回预告
下回咱们继续讲。
下一篇就讲,敬请期待
大家看完发现有什么错误,写在下面吧!跟我黑虎阿福比划比划!