【Go实战 | 电商平台】(11) 更新商品

简介: 文章目录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 路由接口注册

authed.PUT("product/:id", api.UpdateProduct)


1.2 接口函数编写

1.2.1 service层

创建更新商品的服务

type UpdateProductService struct {
  ID            uint   `form:"id" json:"id"`
  Name          string `form:"name" json:"name"`
  CategoryID    int    `form:"category_id" json:"category_id"`
  Title         string `form:"title" json:"title" binding:"required,min=2,max=100"`
  Info          string `form:"info" json:"info" binding:"max=1000"`
  ImgPath       string `form:"img_path" json:"img_path"`
  Price         string `form:"price" json:"price"`
  DiscountPrice string `form:"discount_price" json:"discount_price"`
  OnSale bool `form:"on_sale" json:"on_sale"`
  Num string `form:"num" json:"num"`
}


创建更新的商品服务的方法

func (service *UpdateProductService) Update(id string) serializer.Response {
  ...
}


1.2.2 api层

创建一个更新商品服务的对象

updateProductService := service.UpdateProductService{}


上下文绑定更新商品服务对象

c.ShouldBind(&updateProductService)


调用这个更新服务对象的方法,注意这个id是路由上面的那个id

res := updateProductService.Update(c.Param("id"))


上下文返回

c.JSON(200, res)


完整代码

func UpdateProduct(c *gin.Context) {
  updateProductService := service.UpdateProductService{}
  if err := c.ShouldBind(&updateProductService); err == nil {
  res := updateProductService.Update(c.Param("id"))
  c.JSON(200, res)
  } else {
  c.JSON(200, ErrorResponse(err))
  logging.Info(err)
  }
}


1.3 服务函数编写

找到商品分类

var category model.Category
  model.DB.Model(&model.Category{}).First(&category,service.CategoryID)


找到该商品

var product model.Product
  model.DB.Model(&model.Product{}).First(&product,id)

修改商品信息

product.Name=service.Name
  product.Category=category
  product.CategoryID=uint(service.CategoryID)
  product.Title=service.Title
  product.Info=service.Info
  product.ImgPath=service.ImgPath
  product.Price=service.Price
  product.DiscountPrice=service.DiscountPrice
  product.OnSale=service.OnSale


保存数据库中

err := model.DB.Save(&product).Error


返回信息

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

1.4 验证服务

发送请求

image.png


响应返回

image.png


相关文章
|
3月前
|
Linux Go iOS开发
Go语言100个实战案例-进阶与部署篇:使用Go打包生成可执行文件
本文详解Go语言打包与跨平台编译技巧,涵盖`go build`命令、多平台构建、二进制优化及资源嵌入(embed),助你将项目编译为无依赖的独立可执行文件,轻松实现高效分发与部署。
|
4月前
|
数据采集 数据挖掘 测试技术
Go与Python爬虫实战对比:从开发效率到性能瓶颈的深度解析
本文对比了Python与Go在爬虫开发中的特点。Python凭借Scrapy等框架在开发效率和易用性上占优,适合快速开发与中小型项目;而Go凭借高并发和高性能优势,适用于大规模、长期运行的爬虫服务。文章通过代码示例和性能测试,分析了两者在并发能力、错误处理、部署维护等方面的差异,并探讨了未来融合发展的趋势。
365 0
|
3月前
|
存储 前端开发 JavaScript
Go语言实战案例-项目实战篇:编写一个轻量级在线聊天室
本文介绍如何用Go语言从零实现一个轻量级在线聊天室,基于WebSocket实现实时通信,支持多人消息广播。涵盖前后端开发、技术选型与功能扩展,助你掌握Go高并发与实时通信核心技术。
|
4月前
|
负载均衡 监控 Java
微服务稳定性三板斧:熔断、限流与负载均衡全面解析(附 Hystrix-Go 实战代码)
在微服务架构中,高可用与稳定性至关重要。本文详解熔断、限流与负载均衡三大关键技术,结合API网关与Hystrix-Go实战,帮助构建健壮、弹性的微服务系统。
524 1
微服务稳定性三板斧:熔断、限流与负载均衡全面解析(附 Hystrix-Go 实战代码)
|
4月前
|
安全 Go 开发者
Go语言实战案例:使用sync.Mutex实现资源加锁
在Go语言并发编程中,数据共享可能导致竞态条件,使用 `sync.Mutex` 可以有效避免这一问题。本文详细介绍了互斥锁的基本概念、加锁原理及实战应用,通过构建并发安全的计数器演示了加锁与未加锁的区别,并封装了一个线程安全的计数器结构。同时对比了Go中常见的同步机制,帮助开发者理解何时应使用 `Mutex` 及其注意事项。掌握 `Mutex` 是实现高效、安全并发编程的重要基础。
|
API Go
【Go实战 | 电商平台】(9) 展示商品
1. 展示商品 1.1 路由接口注册 GET请求获取商品列表
189 0
【Go实战 | 电商平台】(9) 展示商品
|
2月前
|
存储 安全 Java
【Golang】(4)Go里面的指针如何?函数与方法怎么不一样?带你了解Go不同于其他高级语言的语法
结构体可以存储一组不同类型的数据,是一种符合类型。Go抛弃了类与继承,同时也抛弃了构造方法,刻意弱化了面向对象的功能,Go并非是一个传统OOP的语言,但是Go依旧有着OOP的影子,通过结构体和方法也可以模拟出一个类。
202 1
|
4月前
|
Cloud Native 安全 Java
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
299 1
|
4月前
|
Cloud Native Go API
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
399 0
|
4月前
|
Cloud Native Java Go
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
261 0

热门文章

最新文章