gin框架学习与实战|青训营笔记

374 阅读3分钟

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 上启动服务
}