golang gin 学习系列

Posted Go语言小白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang gin 学习系列相关的知识,希望对你有一定的参考价值。

 Gin 介绍

Gin是一个golang的微框架,封装比较优雅,API友好。对于golang来说自身的net/http是一个非常轻量级的相比于其它语言开发也简单很多。而我们为什么还需要框架呢?

  1. 框架规范了我们的开发,因为在很多团队中没有那种一线大神来规定好整个项目的框架以及规范,而且团队的每一个人的能力也是不等的,所以我们需要框架来约束

  2. 对于Go语言的框架来说,他其实是一个工具集合,依托于net/http封装了很多的共通方法。让我可以直接使用。


下面我们开启Gin的源码学习过程。其实上面我们也说过,gin是一个很轻量的框架,但是小不代表不好,反而是一个封装很好的框架,个人非常喜欢并且集成了Golang的性能。先来看看Gin的性能对比,这是gin开发者提供,这个只能作为参考大家可以看一下。


Gin 安装

go get github.com/gin-gonic/gin


Gin HelloWorld

package main
import "github.com/gin-gonic/gin"
func main() {
   r := gin.Default()
   r.GET(, (c *gin.Context) {
      c.JSON(, gin.H{
         : ,
      })
   })
   r.Run() 
}


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 ...HandlerFunc) 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 学习系列的主要内容,如果未能解决你的问题,请参考以下文章

One by one系列一步步学习Golang web框架Gin

从别人的代码中学习golang系列--01

从别人的代码中学习golang系列--03

golang的xorm如何将[]map[string][]byte 格式的数据序列化成json输出

Gin框架系列01:极速上手

Gin框架系列01:极速上手