gin基本使用

devtools/2024/9/23 2:30:03/

中文文档:https://gin-gonic.com/zh-cn/docs/

下载和安装gin模块

 go get -u github.com/gin-gonic/gin

简单接口demo

package mainimport "github.com/gin-gonic/gin"func main() {r := gin.Default()                    // 创建一个默认的路由引擎r.GET("/ping", func(c *gin.Context) { // 路由c.JSON(200, gin.H{ // 返回json数据"message": "hello golang",})})r.Run() // 监听并在 0.0.0.0:8080 上启动服务//r.Run(":8081") // 自定义端口
}

浏览器访问:http://127.0.0.1:8080/ping

返回JSON格式数据

package mainimport ("github.com/gin-gonic/gin""net/http"
)func main() {r := gin.Default()// gin.H 是map[string]interface{}的缩写r.GET("/someJSON", func(c *gin.Context) {// 方式一:自己拼接JSONc.JSON(http.StatusOK, gin.H{"message": "Hello world!"})})r.GET("/moreJSON", func(c *gin.Context) {// 方法二:使用结构体var msg struct {Name    string `json:"user"`Message stringAge     int}msg.Name = "小王子"msg.Message = "Hello world!"msg.Age = 18c.JSON(http.StatusOK, msg)})r.Run(":8080")
}

浏览器访问:http://localhost:8080/someJSON,http://localhost:8080/moreJSON

获取参数

推荐一篇博主写的文章,很全,获取请求参数和绑定参数示例都是全的

获取querystring类型参数

package mainimport ("github.com/gin-gonic/gin""net/http"
)func main() {r := gin.Default()r.GET("/user/search", func(c *gin.Context) {username := c.DefaultQuery("username", "小王子") // 没有username对应参数时默认小王子//username := c.Query("username")address := c.Query("address") // 获取address参数//输出json结果给调用方c.JSON(http.StatusOK, gin.H{"message":  "ok","username": username,"address":  address,})})r.Run(":8080")
}

浏览器访问:http://localhost:8080/user/search?username=萧寂&address=河南省

获取form表单参数

package mainimport ("github.com/gin-gonic/gin""net/http"
)func main() {r := gin.Default()r.POST("/user/search", func(c *gin.Context) {// DefaultPostForm取不到值时会返回指定的默认值//username := c.DefaultPostForm("username", "小王子")username := c.PostForm("username")address := c.PostForm("address")//输出json结果给调用方c.JSON(http.StatusOK, gin.H{"message":  "ok","username": username,"address":  address,})})r.Run(":8080")
}

使用apiFox新建快捷请求,地址栏输入:http://localhost:8080/user/search,请求方式选择post,请求参数选择Body里面的form-data或者x-www-form-urlencoded,新增username字段,值为萧寂,address字段,值为河南省,点击发送请求即可

获取JSON参数

package mainimport ("encoding/json""github.com/gin-gonic/gin""net/http"
)func main() {r := gin.Default()r.POST("/json", func(c *gin.Context) {// 注意:下面为了举例子方便,暂时忽略了错误处理b, _ := c.GetRawData() // 从c.Request.Body读取请求数据// 定义map或结构体var m map[string]interface{}// 反序列化_ = json.Unmarshal(b, &m)c.JSON(http.StatusOK, m)})r.Run(":8080")
}

使用apiFox新建快捷请求,地址栏输入:http://localhost:8080/json,请求方式选择post,请求参数选择Body里面的json或者xml或者raw,内容如下,然后点击发请求

{"username":"萧寂","address":"河南省"
}

获取path参数

package mainimport ("github.com/gin-gonic/gin""net/http"
)func main() {r := gin.Default()r.GET("/user/search/:username/:address", func(c *gin.Context) {username := c.Param("username")address := c.Param("address")//输出json结果给调用方c.JSON(http.StatusOK, gin.H{"message":  "ok","username": username,"address":  address,})})r.Run(":8080")
}

浏览器访问:http://localhost:8080/user/search/萧寂/河南省

获取请求头参数和设置响应头参数

package mainimport ("fmt""github.com/gin-gonic/gin"
)func main() {r := gin.Default()r.POST("/headers", func(c *gin.Context) {//获取请求头参数  不区分大小写str := c.GetHeader("hahaha")fmt.Println("获取请求头参数:", str)//设置响应头c.Header("token", "6666666666abc")c.JSON(200, gin.H{"msg": "成功"})})// 启动服务器r.Run(":8080")
}

使用apiFox新建快捷请求,地址栏输入:http://localhost:8080/headers,请求方式选择post,请求参数选择headers里面的新增参数hahaha内容数字或者英文任意,然后点击发请求

然后查看响应头参数和控制台打印的请求头参数

绑定参数

为了能够更方便的获取请求相关参数,提高开发效率,我们可以基于请求的Content-Type识别请求数据类型并利用反射机制自动提取请求中QueryString、form表单、JSON、XML等参数到结构体中。 下面的示例代码演示了.ShouldBind()强大的功能,它能够基于请求自动提取JSON、form表单和QueryString类型的数据,并把值绑定到指定的结构体对象。

推荐一篇博主写的文章,很全,获取请求参数和绑定参数示例都是全的

package mainimport ("fmt""github.com/gin-gonic/gin""net/http"
)// Binding from JSON
type Login struct {User     string `form:"user" json:"user" binding:"required"`Password string `form:"password" json:"password" binding:"required"`
}func main() {router :=

http://www.ppmy.cn/devtools/115760.html

相关文章

【webpack4系列】webpack构建速度和体积优化策略(五)

文章目录 速度分析:使用 speed-measure-webpack-plugin体积分析:使用webpack-bundle-analyzer使用高版本的 webpack 和 Node.js多进程/多实例构建资源并行解析可选方案使用 HappyPack 解析资源使用 thread-loader 解析资源 多进程并行压缩代码方法一&…

docker desktop windows stop

服务docker改为启动 cmd下查看docker版本 {"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"experimental": false,"registry-mirrors": ["https://hub.atomgit.com/"]…

从零到精通!新手实测ToDesk云电脑、易腾云、顺网云,云端畅玩黑神话悟空、魔兽世界

一、引言 在数字时代,云计算技术革新了娱乐方式,尤其在游戏领域带来巨变。玩家通过云端资源,享受流畅、逼真游戏体验,不再受限于硬件。但面对众多云电脑产品,新手玩家常感迷茫。 本文实测ToDesk云电脑、易腾云、顺网云…

我国首次星间激光100Gbps超高速高分辨遥感影像传输试验

“吉林一号”平台02A01星、平台02A02星,成功开展我国首次星间激光100Gbps超高速高分辨遥感影像传输试验。 “吉林一号”星座是长光卫星在建的核心工程,目前已成功实现“百星飞天”的阶段性目标,并逐步成为全球重要的航天遥感信息来源。随着星…

《娱乐至死》

娱乐是温水煮青蛙式的慢性自杀吗? 文字(旧媒介) VS 视频(新媒体) 思考深浅 阅读书籍更容易让人引发深度思考 连贯性 刷视频获得的信息更多是碎片化的知识 影响 娱乐内容容易让人上瘾,从而逐步让人养成逃避…

面试八股--stram 中map和flatmap的区别

map和flatMap都是用于处理集合(如列表、数组等)中的元素的方法,它们的主要区别在于处理结果的方式。 map:它会对集合中的每个元素应用一个函数,并将结果收集到一个新的集合中。这意味着map操作不会改变原始集合的结构&…

【MyBatis】Java 数据持久层框架:认识 MyBatis

Java 数据持久层框架:认识 MyBatis 1.CRUD 注解2.映射注解3.高级注解3.1 高级注解3.2 MyBatis 3 注解的用法举例 MyBatis 和 JPA 一样,也是一款优秀的 持久层框架,它支持定制化 SQL、存储过程,以及高级映射。它可以使用简单的 XML…

偶数、奇数、整数与指数

引言 在前面的课程中,我们已经学习了 Python 的基本输入输出、数据类型及其转换、顺序结构、分支结构、循环结构、循环控制语句、字符串类型、列表类型、元组类型、字典类型、集合类型、函数的定义与使用、函数调用与作用域、函数的高级应用、质数、倍数与余数。本课…