当前位置: 首页 > news >正文

【gin框架读取参数的方式】

gin框架读取参数的方式

package mainimport ("fmt""log""net/http""github.com/gin-gonic/gin"
)// 定义结构体type Book struct {Name   string `json:"name"`Author string `json:"author"`
}func main() {// 创建默认的gin路由引擎server := gin.Default()// 创建业务路由 并返回数据server.GET("/api/hello", func(c *gin.Context) {c.JSON(200, gin.H{"code":    0,"message": "Hello World","data":    nil,})})// gin框架读取参数/*1 读取url路径参数/ api/books/:nameserver.GET("/api/books/:name/:year/:month", func(c *gin.Context) {})请求curl --location --request GET 'http://127.0.0.1:18080/api/books/testBook'返回{"code": 0,"data": null,"message": "testBook"}*/// 接口示例server.GET("/api/books/:name", func(c *gin.Context) {// c.Param 读取参数name := c.Param("name")// 返回JSON数据c.JSON(http.StatusOK, gin.H{"code":    0,"message": name,"data":    nil,})})/*2 读取url 查询参数/api/books?pageSize=10&pageNum=1请求curl --location --request GET 'http://127.0.0.1:18080/api/books?pageSize=1000&pageNum=10'返回{"code": 0,"data": null,"message": "pageSize=1000&pageNum=10"}*/// 接口示例server.GET("/api/books", func(c *gin.Context) {ps := c.Query("pageSize")pn := c.Query("pageNum")returnData := fmt.Sprintf("pageSize=%s&pageNum=%s", ps, pn)c.JSON(http.StatusOK, gin.H{"code":    0,"message": returnData,"data":    nil,})})/*3 读取header参数常用于接口认证 Authorization Bearer xxxxxxx请求curl --location --request GET 'http://127.0.0.1:18080/api/bookAuth'  --header 'Authorization: Bearer test_token'返回{"code": 0,"data": null,"message": "Bearer test_token"}*/// 接口示例server.GET("/api/bookAuth", func(c *gin.Context) {auth := c.GetHeader("Authorization")c.JSON(http.StatusOK, gin.H{"code":    0,"message": auth,"data":    nil,})})/*4 body中读取参数 推荐ShouldBindJson一般用于提交数据 POST请求 或者 PUT 等{"name":"初始Go语言","author":"XiaoLx005"}JSON -- struct// 请求curl --location --request POST 'http://127.0.0.1:18080/api/books' --header 'Content-Type: application/json' \--data-raw '{"name":"初始Go语言","author":123}'// 返回{"code": 1,"data": null,"message": "json: cannot unmarshal number into Go struct field Book.author of type string"}ShouldBindJSON和BindJSON的区别以及使用场景ShouldBindJSON:绑定 JSON 数据时,如果出现错误(例如 JSON 数据格式不符合预期、类型不匹配等),它不会直接返回 HTTP 错误响应。而是返回一个错误值,由开发者决定如何处理这个错误。例如:if err := c.ShouldBindJSON(&user); err!= nil {c.JSON(400, gin.H{"error": err.Error()})return}适用于需要对错误进行详细记录、自定义错误处理逻辑(比如根据不同的错误类型返回不同的状态码或消息)的情况。例如,在一个复杂的微服务架构中,可能需要将错误信息发送到专门的错误收集服务进行分析,此时ShouldBindJSON就很有用。BindJSON:绑定 JSON 数据出现错误,它会自动返回一个状态码为 400(Bad Request)的响应给客户端,并且在响应体中包含了错误信息。例如:if err!= nil {// 这里不需要手动返回错误响应,因为BindJSON已经自动返回了return}适用于简单的 API 场景,对于错误处理要求不高,只需要快速返回一个基本的错误提示给客户端的情况。例如,一个小型的内部工具的 API,主要关注功能实现,对于错误处理只要符合常见的 HTTP 规范(返回 400 错误)就足够了。*/// 接口示例 结构体定义在函数外server.POST("/api/books", func(c *gin.Context) {// 定义变量 为Book struct//var book Bookbook := new(Book)// c.ShouldBindJSON 将上下文接收的数据 绑定 结构体数据err := c.ShouldBindJSON(&book)if err != nil {c.JSON(http.StatusBadRequest, gin.H{"code":    1,"message": err.Error(),"data":    nil,})} else {c.JSON(http.StatusOK, gin.H{"code":    0,"message": "success","data":    nil,})}})// 启动服务 指定端口err := server.Run(":18080")// 错误处理if err != nil {panic(err)} else {log.Println("Server started")}
}
http://www.dtcms.com/a/423415.html

相关文章:

  • 南京建网站wordpress 主题demo
  • 铜陵高端网站建设seo优化关键词0
  • 济南教育论坛网站建设哪个平台查企业免费
  • asp连接数据库做登录网站完整下载辽宁城乡住房建设厅网站首页
  • golang可观测-无侵入式agent技术原理
  • Hive中map函数的基础知识及使用
  • 《法务RAG开发不踩坑:Kiln+LlamaIndex+Helicone的协同方法指南》
  • 五金外贸接单网站个人如何做购物网站 关于支付接口
  • 做小型企业网站多少钱浙江网站优化公司
  • 美团滑块-[h5Fingerprint] 加密分析
  • 华北水利水电大学信息工程学院赴郑州埃文科技有限公司交流
  • 如何申请域名网站注册怎么上传做 好的网站吗
  • 网站开发工程师要求php红色酒类食品企业网站源码
  • AI视频技术的边界:现状、限制与未来展望
  • 企业门户网站费用2345网止导航
  • 有自己的网站怎么做淘宝客济南网站建设系统
  • Android音频学习(二十一)——ALSA简介
  • Android 12 SplashScreen启动屏
  • 游戏开发难还是网站开发难装宽带需要多少钱一个月
  • Unity内嵌浏览器插件:3DWebView,显示不支持的音频/视频格式解决办法
  • 网站开发需求列表dw网页设计作业成品加解析
  • Coze源码分析-资源库-编辑插件-后端源码-IDL/API/应用服务层
  • JuiceSSH+cpolar:手机如何轻松远程连接内网虚拟机?
  • 模式组合应用-代理模式
  • 招聘网站的SEO怎么做建站免费软件
  • 内嵌式模组在物联网设备中如何体现?
  • 【Vue实现跳转页面】功能 - 总结
  • 网站刷流量对网站有影响吗猪八戒网做网站如何付款
  • Linux网络编程05:IO多路转接(万字图文解析)
  • 在 Kubernetes 集群中手动部署开发的应用程序