跟着开源项目学GO(12)

293 阅读3分钟

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

生命不息,学习不止

题外话

今天是周四啦,话术字节那位算法架构好可惜呀,可以说是年轻有为了,这也给我们提了个醒呀,身体很重要,广大掘友们一定要注意呀,毕竟适当摸鱼有助于身体健康不是嘛,嘿嘿嘿……

截图_20222517032552.png

废话不多说,上货

在这里插入图片描述

开源项目——go-gin-api

go-gin-api

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

需求回顾

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

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

今天我们就来实现这个需求

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

截图_20224623064656.png

func (h *handler) List() core.HandlerFunc {

我们先来说一下List这个方法,之前都是说函数,为什么这回说是方法了呢,Go 语言中同时有函数和方法

当一个函数包含了接收者,就可以定义为方法

为什么有这么个作用呢,我们都知道在go中不是面向对象的,类似常见的 Java。C++ 等语言中,实现类的方法做法都是编译器隐式的给函数加一个 this 指针,而在 Go 里,这个 this 指针需要明确的申明出来,其实和其它 OO 语言并没有很大的区别。

接受体h * handler定义如下,

截图_20225125065151.png

我们主要关注 adminService admin.Service,这个其实就是定义的service层具体的Service方法,下面遇到会具体讲解

req := new(listRequest)  //定义参数体
res := new(listResponse) //定义返回体

声明了参数体与返回体,定义如下,可以看到参数体的成员变量就是所需参数,返回体就是数据列表加上分页所需要的数据。

截图_20225726025715.png

随后便是通过反序列化函数ShouldBindForm将参数反序列化并赋值给req,接口定义如下

截图_20221726031743.png

其实就是在context.ctx.ShouldBindWith序列函数的基础上再次封装了一层,实现类如下

截图_20221926031942.png

序列化与反序列化

序列化:在我的认值中就是将对象或结构体转换成可以传输的字节码数据。

反序列化:看字面就知道是和序列化相反的了,那就是将字节码数据转换成对象或结构体。

为什么要有这个序列化这个操作呢,我么都知道对象的声明周期是跟着程序的运行而创建,程序的停止而死亡。

但如果我想讲对象传递给其他服务,这个服务想让这个对象长久保存,也就是所谓的持久化服务。

这时就需要我们对对象或结构体做序列化处理,传递出去,然后做持久化的服务将数据反序列化转换成结构体保存。

下回预告

下回咱们继续讲。

下一篇就讲,敬请期待

在这里插入图片描述

大家看完发现有什么错误,写在下面吧!跟我黑虎阿福比划比划! 在这里插入图片描述