Gin 介绍
Gin是一个 golang 的微框架,封装比较优雅,API友好。对于 golang 来说自身的net/http是一个非常轻量级的相比于其它语言开发也简单很多。而我们为什么还需要框架呢?
-
框架规范了我们的开发,因为在很多团队中没有那种一线大神来规定好整个项目的框架以及规范,而且团队的每一个人的能力也是不等的,所以我们需要框架来约束
-
对于Go语言的框架来说,他其实是一个工具集合,依托于net/http封装了很多的共通方法。让我可以直接使用。
下面我们开启 Gin 源码阅读的学习过程。其实上面我们也说过,gin是一个很轻量的框架,但是小不代表不好,反而是一个封装很好的框架,个人非常喜欢并且集成了 golang 的性能。先来看看Gin的性能对比,这是gin开发者提供,这个只能作为参考大家可以看一下。
Gin 安装
go get github.com/gin-gonic/gin
Gin HelloWorld
Gin Route详情
在查看Gin源码的时候我们会发现,Gin的路由操作全部来自type RouteGroup的结构
-
func (group *RouterGroup) Any(relativePath string, handlers …HandlerFunc) IRoutes //同时注册所有的HTTP 方法。
-
func (group *RouterGroup) BasePath() string //获取Group的basePath
-
func (group *RouterGroup) DELETE(relativePath string, handlers … Handle rFunc) IRoutes //注册Http DELELTE方法
-
func (group *RouterGroup) GET(relativePath string, handlers …HandlerFunc) IRoutes //注册Http GET方法
-
func (group *RouterGroup) Group(relativePath string, handlers …HandlerFunc) *RouterGroup //增加分组
-
func (group *RouterGroup) HEAD(relativePath string, handlers …HandlerFunc) IRoutes //注册Http HEAD方法
-
func (group *RouterGroup) Handle(httpMethod, relativePath string, handlers …HandlerFunc) IRoutes //注册自定义Handle方法
-
func (group *RouterGroup) OPTIONS(relativePath string, handlers …HandlerFunc) IRoutes //注册Http OPTIONS方法
-
func (group *RouterGroup) PATCH(relativePath string, handlers …HandlerFunc) IRoutes //注册Http PATCH方法
-
func (group *RouterGroup) POST(relativePath string, handlers …HandlerFunc) IRoutes //注册Http POST方法
-
func (group *RouterGroup) PUT(relativePath string, handlers …HandlerFunc) IRoutes //注册Http POST方法
-
func (group *RouterGroup) Static (relativePath, root string) IRoutes//注册静态文件路径
-
func (group *RouterGroup) StaticFS(relativePath string, fs http.FileSystem) IRoutes//注册静态文件路径和Static方法类似,只是gin自定义了一个gin.Dir方法
-
func (group *RouterGroup) StaticFile(relativePath, filepath string) IRoutes //注册静态文件
-
func (group *RouterGroup) Use( middleware …HandlerFunc) IRoutes //为路由添加静态 中间件
同时对于gin Engine结构,拓展了几个方法在项目开发中也很实用,这里也给大家贴出来。
-
func Default() *Engine //初始化gin项目,gin默认加入了日志和recovery中间件
-
func New() *Engine //初始化gin项目,没有任何中间件
-
func (engine *Engine) Delims(left, right string) *Engine //设置前端模版读取数据格式如默认是{{}} 在使用vuejs的时候也是{{}},因此就会有冲突。所有我们可以通过此方法自定义
-
func (engine *Engine) LoadHTMLFiles(files …string) //渲染模版文件
-
func (engine *Engine) LoadHTMLGlob(pattern string) //注册模版目录
-
func (engine *Engine) NoMethod(handlers …HandlerFunc) //当访问的方法不被允许时出发。这个目前好像无法达到效果,也许我的方法不对
-
func (engine *Engine) NoRoute(handlers …HandlerFunc) //当访问的路由不存在时,触发此方法
-
func (engine *Engine) Routes() (routes RoutesInfo) //同时注册多个路由
-
func (engine *Engine) Run(addr …string) (err error) //运行一个http路由,通过ListenAndServe。此方法将阻塞进程终止。
-
func (engine *Engine) RunTLS(addr, certFile, keyFile string) (err error) //运行一个https路由,通过ListenAndServeTLS,此方法将阻塞进程终止
-
func (engine *Engine) RunUnix(file string) (err error) //创建一个Unix域套接字
-
func (engine *Engine) SecureJsonPrefix(prefix string) *Engine //安全JSON前缀
-
func (engine *Engine) ServeHTTP(w http.ResponseWriter, req *http.Request) //注册ServeHttp
-
func (engine *Engine) SetFuncMap(funcMap template.FuncMap) //注册模版方法
-
func (engine *Engine) SetHTMLTemplate(templ *template.Template) //设置HTML模版
-
func (engine *Engine) Use(middleware …HandlerFunc) IRoutes //注册全局中间件
以上今天针对gin 框架的源码阅读的学习,同时也学习一下框架写代码的思路。后面会不断学习下一章将介绍 golang gin 框架的context结构体。
golang gin 学习系列(二)