这是我参与「第三届青训营 -后端场」笔记创作活动的的第12篇笔记
😆在这里,我对今天所新学到的Golang主流的GIN框架的第一次搭建做了一次总结
😜Golang的其他知识在哪里找呢,那你就问对了
👨💻Golang基础复习 - 掘金 (juejin.cn) 在这里我总结了一些这篇文章没有提到的一些知识
😊如果有小伙伴能想到更多知识,欢迎大家在评论区留言,那么我们就开始吧
👩💻👨💻哟西,一个棕~
😎😎😎我是小小分割线
介绍
首先,贴出GIN的官网:Gin Web Framework (gin-gonic.com)
Gin是什么呢?
Gin的官网上这样写道:
Gin 是一个用 Go (Golang) 编写的 Web 框架。 它具有类似 martini 的 API,性能要好得多,多亏了 httprouter,速度提高了 40 倍。 如果您需要性能和良好的生产力,您一定会喜欢 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。
可扩展性
新建一个中间件非常简单
安装
要求:- Go 1.13 及以上版本
使用go get就可以安装了
go get -u github.com/gin-gonic/gin
分析
安装好之后我们就可以开始写我们第一个Gin的Demo了
首先,我们回忆一下
一个Web的demo需要一个处理器,和一个端口监听
我们来看看对应的API
首先Gin提供了引擎,我们来看看默认引擎
// Default returns an Engine instance with the Logger and Recovery middleware already attached.
func Default() *Engine {
debugPrintWARNINGDefault()
engine := New()
engine.Use(Logger(), Recovery())
return engine
}
我们可以看到默认引擎它就是默认返回已附加 Logger 和 Recovery 中间件的 Engine 实例。
我们再来看看我们的处理器,我们就看最常用的Get
// GET is a shortcut for router.Handle("GET", path, handle).
func (group *RouterGroup) GET(relativePath string, handlers ...HandlerFunc) IRoutes {
return group.handle(http.MethodGet, relativePath, handlers)
}
可以看到有两个参数
一个是相对路径
一个是处理方法,可以多个
我们来看看这个处理方法
// HandlerFunc defines the handler used by gin middleware as return value.
type HandlerFunc func(*Context)
我们可以看到有一个context对象参数,我们来看一下context对象常用的API
// String writes the given string into the response body.
func (c *Context) String(code int, format string, values ...interface{}) {
c.Render(code, render.String{Format: format, Data: values})
}
我们可以看到这个方法用于将给定的字符串写入响应正文。
这个方法里面有三个参数:
-
ttp状态码
-
字符串
-
values 是一个对象,可传零个或多个
我们再看看端口监听的API
// Run attaches the router to a http.Server and starts listening and serving HTTP requests.
// It is a shortcut for http.ListenAndServe(addr, router)
// Note: this method will block the calling goroutine indefinitely unless an error happens.
func (engine *Engine) Run(addr ...string) (err error) {
defer func() { debugPrintError(err) }()
if engine.isUnsafeTrustedProxies() {
debugPrint("[WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.\n" +
"Please check https://pkg.go.dev/github.com/gin-gonic/gin#readme-don-t-trust-all-proxies for details.")
}
address := resolveAddress(addr)
debugPrint("Listening and serving HTTP on %s\n", address)
err = http.ListenAndServe(address, engine)
return
}
我们可以看到
Run 将路由器连接到 http.Server 并开始侦听和服务 HTTP 请求。
它是 http.ListenAndServe(addr, router) 的快捷方式
它默认监听8080端口
使用
我们来写一个小demo看一看效果
package main
import "github.com/gin-gonic/gin"
func main() {
// 使用Gin默认的引擎
engine := gin.Default()
// 使用匿名函数传参
engine.GET("/hello", func(context *gin.Context) {
// 我们调用它的String这个API
// 状态码200为OK
context.String(200,"hello,你好世界")
})
// 默认在8080端口监听
engine.Run()
}
运行起来可以看到确实默认监听8080端口
而且的确默认引擎是附加 Logger
此时运行效果为
此时我们的第一个Gin框架的demo就做好了
当然我们如果需要前后端分离的模式,接口想要Json的数据格式,那我们可以将String()换成Json()
😎😎😎又是我,我还是小小分割线
都用心看到这里了,那就求个赞吧😘
🥳🥳🥳如果小伙伴有其他的小知识,一定不要忘了在评论区讨论哟,多多讨论,生态才会越来越好