go语言之分页功能

前台页面在调用后台接口的时候,是需要根据点击页数显示对应数据,如图:

说明:前台传递的是页数,第几页第几页参数定义为PageNum,后台接收页数后,然后根据页数以及每页显示的数据量(PageSize)来返回对应数据

本例子中以运维平台oamp中获取中间件功能为例子加以演示,项目跟目录为/data/oamp

实现方法如下:

1、首先在配置文件oamp/conf/app.ini中定义PageSize的值,本例子中定义为10,如图:

2、定义获取页数的函数,在文件oamp/pkg/util/page.go中,如图:

  • 定义一个初始值result为0
  • c.Query(“PageNum”)表示请求接口的时候传递的参数PageNum的值,如果存在返回值,否则返回空字符串
  • com.StrTo表示强制类型转换,此处将字符串强制转换为int,除了Int()还可用MustInt(),区别是Int()有两个返回值,其中一个是err,而MustInt()只返回一直转换后的值
  • 如果转换后的pageNum大于0,需要将其减去1,为什么减去1,假如pageNum为1,表示获取第一页的数据,如果在执行查询数据前十条的时候,where条件将变为id > 1*10,那么将从第10条开始查,本应该从第一条开始查,也就是id > 0*10,从第一条开始,往下看就可以明白了
  • return -1:-1是自定义的,表示如果c.Query中没有查询到数据,也就是没有传递页数,其实获取的是全部数据

3、声明结构体,定义函数并将页数绑定到结构体字段PageNum上,如图:

注:本例子只演示分页,其余的绑定问题在次不讨论

从上图看出,绑定后对结构体GetMiddle进行实例化然后调用其中的方法GetMiddleware()

4、查看GetMiddleware方法,如图:

  • 第一个g.PageNum传递给方法GetMiddleKeysPagenum用于获取页数对应的redis的key
  • 第二个g.PageNum传递给函数MiddlePage用于获取数据并设置Redis的key
  • PageSize:每页显示的数据条数,在配置文件中设定的

5、查看models中MiddlePage函数,根据页数获取数据,如图:

上图中,PageNum*PageSize表示id需要跳过的数据,比如传的参数PageNum为1,那么通过util包的GetPage后实际传递到后台的PageNum为0,那么此时id >0*10,获取的数据就是从id为1开始的,当PageNum为2,实际传递过去的PageNum为1,此时id > 1* 10,那么获取的数据就是从id为11开始,Limit表示获取的数据条数

c.Query和c.Param有什么区别?

c.Query用来获取GET请求中的key的值对应的结果,如下:

GET /path?id=1234&name=Manu&value=
       c.Query("id") == "1234"
       c.Query("name") == "Manu"

c.Param用来获取动态参数的值,如下:

router.GET("/user/:id", func(c *gin.Context) {
            // a GET request to /user/john

            //id表示动态参数
            id := c.Param("id") // id == "john"
        })

标签