go语言之搜索功能实现
在文章go语言之分页功能中,我们知道,如果要实现分页,那么只需要将页的数量作为参数传递到后台,然后根据页数和每页的数据量来进行查找从而实现分页功能(PageNum * PageSize)
搜索功能的实现原理相同,我们只需要将要搜索的字段传递到后台,同时传递页数过去,然后根据字段名以及页数和每页数据量一起来实现搜索功能
本例子还是以运维平台oamp中间件模块为例子,实现搜索
1、首先在文件/oamp/router/api/v1/middleware.go中获取中间件的结构体中添加搜索字段SearchMiddle,如图:

2、实例化中间件服务结构体,并给字段赋值,调用方法获取中间件数据,如图:

3、在方法GetMiddleware()中调用函数MiddlePage并传递是三个参数获取数据,如下:
middlepage, err := models.MiddlePage(g.PageNum, setting.AppSetting.PageSize, g.SearchMiddle)
#SearchMiddle表示要搜索的字段
4、在函数MiddlePage中,查询数据库获取数据,如下:
err := db.Where("id > ?", PageNum*PageSize).Where("ip_address = @searchmiddle OR middleware_name = @searchmiddle", sql.Named("searchmiddle", SearchMiddle)).Limit(PageSize).Find(&middle).Error
上面代码中通过两个Where来判断条件,第一个为获取数据的id信息,根据PageNum和PageSize,第二个Where为筛选条件,当ip_address或者middleware_name等于搜索的字段为条件,@serchmiddle为变量,sql.Named中指定变量并设置值,这个值就是传递过来的数据,sql.Named为固定写法,例如:我们输入要搜索的中间件名为nginx ,页数PageNum为第一页,那么在查询数据库的时候,就是查找当middleware_name为Nginx的数据,查找后从id为0开始获取10条数据
其他:
为了配置前台实现搜索+分页,后台在返回数据的时候,要顺便返回一下搜索的字段名,如图:


为什么要返回搜索的字段名?
因为前台vue在调用后台接口的时候,第一个输入要搜索的字段,那么默认会将字段与第一页的页码传递到后台,如果搜索的数据超过了10条,当点击第2页的时候,此时没有将搜索字段传递给后台,只传递了页码数,那么此时获取的数据,就是按照全部数据获取的,相当于获取的全部数据的第2页,因此点击第2页的时候,我们应该同样将搜索字段和页码传递到后台,具体vue中如何实现,可查看文章vue表格实现搜索功能


