【Go实战 | 电商平台】(10) 搜索商品

简介: 文章目录1. 搜索商品1.1 路由接口注册1.2 接口函数编写1.2.1 service层1.2.2 api层1.3 服务函数编写1.4 验证服务

文章目录

1. 搜索商品

1.1 路由接口注册

1.2 接口函数编写

1.2.1 service层

1.2.2 api层

1.3 服务函数编写

1.4 验证服务

1. 搜索商品

1.1 路由接口注册

v1.POST("products", api.SearchProducts)

1.2 接口函数编写

1.2.1 service层

定义一个搜索商品的服务结构体

结构体中的info就是传送过来的要搜索商品的信息

type SearchProductsService struct {
  Info string `form:"info" json:"info"`
  PageNum            int    `form:"pageNum"`
  PageSize           int    `form:"pageSize"`
}


定义这个结构体的搜索方法

func (service *SearchProductsService) Search() serializer.Response {
  ...
}


1.2.2 api层

定义搜索商品服务的对象

searchProductsService := service.SearchProductsService{}


绑定这个结构对象到上下文中

c.ShouldBind(&searchProductsService)


调用商品服务对象下的搜索方法

res := searchProductsService.Search()


上下文返回

c.JSON(200, res)


完整代码

func SearchProducts(c *gin.Context) {
  searchProductsService := service.SearchProductsService{}
  if err := c.ShouldBind(&searchProductsService); err == nil {
    res := searchProductsService.Search()
    c.JSON(200, res)
  } else {
    c.JSON(200, ErrorResponse(err))
    logging.Info(err)
  }
}

1.3 服务函数编写

定义商品模型对象列表

var products []model.Product
  code := e.SUCCESS

如果传送过来的是页数是0的话,就默认是15

if service.PageSize==0 {
  service.PageSize=15
  }

LIKE对数据库进行模型搜索

err := model.DB.Where("name LIKE ?", "%"+service.Info+"%").
  Offset((service.PageNum - 1) * service.PageSize).
  Limit(service.PageSize).Find(&products).Error


返回数据

return serializer.Response{
  Status: code,
  Data:   serializer.BuildProducts(products),
  Msg:    e.GetMsg(code),
  }

1.4 验证服务

商品请求

image.png

响应返回

image.png

相关文章
|
4月前
|
Shell Go API
Go语言grequests库并发请求的实战案例
Go语言grequests库并发请求的实战案例
|
4月前
|
安全 大数据 Go
深入探索Go语言并发编程:Goroutines与Channels的实战应用
在当今高性能、高并发的应用需求下,Go语言以其独特的并发模型——Goroutines和Channels,成为了众多开发者眼中的璀璨明星。本文不仅阐述了Goroutines作为轻量级线程的优势,还深入剖析了Channels作为Goroutines间通信的桥梁,如何优雅地解决并发编程中的复杂问题。通过实战案例,我们将展示如何利用这些特性构建高效、可扩展的并发系统,同时探讨并发编程中常见的陷阱与最佳实践,为读者打开Go语言并发编程的广阔视野。
|
5月前
|
消息中间件 缓存 Kafka
go-zero微服务实战系列(八、如何处理每秒上万次的下单请求)
go-zero微服务实战系列(八、如何处理每秒上万次的下单请求)
|
5月前
|
消息中间件 SQL 关系型数据库
go-zero微服务实战系列(十、分布式事务如何实现)
go-zero微服务实战系列(十、分布式事务如何实现)
|
5月前
|
消息中间件 NoSQL Kafka
go-zero微服务实战系列(九、极致优化秒杀性能)
go-zero微服务实战系列(九、极致优化秒杀性能)
|
13天前
|
存储 监控 算法
员工上网行为监控中的Go语言算法:布隆过滤器的应用
在信息化高速发展的时代,企业上网行为监管至关重要。布隆过滤器作为一种高效、节省空间的概率性数据结构,适用于大规模URL查询与匹配,是实现精准上网行为管理的理想选择。本文探讨了布隆过滤器的原理及其优缺点,并展示了如何使用Go语言实现该算法,以提升企业网络管理效率和安全性。尽管存在误报等局限性,但合理配置下,布隆过滤器为企业提供了经济有效的解决方案。
54 8
员工上网行为监控中的Go语言算法:布隆过滤器的应用
|
1月前
|
存储 Go 索引
go语言中数组和切片
go语言中数组和切片
41 7
|
1月前
|
Go 开发工具
百炼-千问模型通过openai接口构建assistant 等 go语言
由于阿里百炼平台通义千问大模型没有完善的go语言兼容openapi示例,并且官方答复assistant是不兼容openapi sdk的。 实际使用中发现是能够支持的,所以自己写了一个demo test示例,给大家做一个参考。
|
1月前
|
程序员 Go
go语言中结构体(Struct)
go语言中结构体(Struct)
102 71
|
1月前
|
存储 Go 索引
go语言中的数组(Array)
go语言中的数组(Array)
106 67