gin框架学习与实战|青训营笔记
这是我参与「第三届青训营 -后端场」笔记创作活动的第2篇笔记
本文将介绍一些gin常用的知识。
1.gin介绍与特性
介绍
Gin 是一个用 Go (Golang) 编写的 Web 框架。 它具有类似 martini 的 API,性能要好得多,多亏了 httprouter,速度提高了 40 倍。 如果您需要性能和良好的生产力,您一定会喜欢 Gin。
在本节中,我们将介绍 Gin 是什么,它解决了哪些问题,以及它如何帮助你的项目。
或者, 如果你已经准备在项目中使用 Gin,请访问快速入门.
特性
快速
基于 Radix 树的路由,小内存占用。没有反射。可预测的 API 性能。
支持中间件
传入的 HTTP 请求可以由一系列中间件和最终操作来处理。 例如:Logger,Authorization,GZIP,最终操作 DB。
Crash 处理
Gin 可以 catch 一个发生在 HTTP 请求中的 panic 并 recover 它。这样,你的服务器将始终可用。例如,你可以向 Sentry 报告这个 panic!
JSON 验证
Gin 可以解析并验证请求的 JSON,例如检查所需值的存在。
路由组
更好地组织路由。是否需要授权,不同的 API 版本…… 此外,这些组可以无限制地嵌套而不会降低性能。
错误管理
Gin 提供了一种方便的方法来收集 HTTP 请求期间发生的所有错误。最终,中间件可以将它们写入日志文件,数据库并通过网络发送。
内置渲染
Gin 为 JSON,XML 和 HTML 渲染提供了易于使用的 API。
可扩展性
新建一个中间件非常简单,去查看示例代码吧。
2.配置路由以及GET,POST,PUT,DELETE的各个含义
r := gin.Default() 表示创建一个默认的路由引擎 GET表示直接在网页进行返回值 post请求主要用于增加数据 put请求主要用于增加数据 delete请求主要用于删除数据 r.run可以更改端口服务 http.StatusOK代表状态码 代表200
状态码如下:
StatusOK = 200 // RFC 7231, 6.3.1
StatusCreated = 201 // RFC 7231, 6.3.2
StatusAccepted = 202 // RFC 7231, 6.3.3
StatusNonAuthoritativeInfo = 203 // RFC 7231, 6.3.4
StatusNoContent = 204 // RFC 7231, 6.3.5
StatusResetContent = 205 // RFC 7231, 6.3.6
StatusPartialContent = 206 // RFC 7233, 4.1
StatusMultiStatus = 207 // RFC 4918, 11.1
StatusAlreadyReported = 208 // RFC 5842, 7.1
StatusIMUsed = 226 // RFC 3229, 10.4.1
import (
"net/http"
"github.com/gin-gonic/gin"
)
func main() {
// gin快速搭建web服务 配置路由
r := gin.Default() //创建一个默认的路由引擎
r.GET("/", func(c *gin.Context) {
c.String(200, "值:%v", "你好gin")
})
r.GET("/news", func(c *gin.Context) {
c.String(200, "新闻页面")
})
r.POST("/post1", func(c *gin.Context) {
c.String(http.StatusOK, "post请求 主要用于增加数据") //http.StatusOK代表状态码 代表200
})
r.PUT("/put1", func(c *gin.Context) {
c.String(200, "put请求 主要用于编辑数据")
})
r.DELETE("/delete1", func(c *gin.Context) {
c.String(200, "DELETE请求 主要用于删除数据")
})
r.Run(":8000") // 监听并在 0.0.0.0:8080 上启动服务
}
gin响应数据
相关代码如下:有json jsonp 具体区别和分析都给予注释
import (
"github.com/gin-gonic/gin"
)
type Article struct {
Title string `json:"title"`
Desc string `json:"desc"`
Content string `json:"ccccontent"` //后边加`json:"ccccontent"` 可以把前边的Context重命名为ccccontent
}
func main() {
// gin快速搭建web服务 配置路由
r := gin.Default() //创建一个默认的路由引擎
r.GET("/", func(c *gin.Context) {
c.String(200, "值:%v", "你好gin")
})
r.GET("/json", func(c *gin.Context) {
c.JSON(200, map[string]interface{}{
"success": true, //success表示键 true表示值
"msg": "你好gin",
}) //json第二个为空接口类型 可以定义map类型也可以定义struct类型
})
r.GET("/json3", func(c *gin.Context) {
a := &Article{
Title: "结构体类型",
Desc: "描述",
Content: "测试",
}
c.JSON(200, a)
})
//jsonp请求 jsonp与json的区别在于 jsonp可以响应请求
r.GET("/jsonp", func(c *gin.Context) {
a := &Article{
Title: "结构体类型",
Desc: "描述",
Content: "测试",
}
c.JSONP(200, a)
})
//
r.Run(":8000") // 监听并在 0.0.0.0:8080 上启动服务
}