Go Gin框架入门

简介

入门

一个简单实例
  • engine := gin.Default()函数,返回一个Engine指针,代表整个框架的一个实例。是框架的入口,通过它来定义服务路由信息。本质是对go语言中内置的http server的包装。

    一般创建Engine都是使用Default()或New(),Default()内部也是调用New()。

    调用engine的GET方法:engine.GET("/hello",funcName),两个参数,一个是相对路径,另一个是多个handler。表示针对用户一个请求地址可以指定多个handler来处理用户请求(一般是一个handler处理一个请求)。

    engine.Run(":端口号") ,指定端口号

    package main
    
    import (
    	"github.com/gin-gonic/gin"
    	"net/http"
    )
    
    func main(){
           
    	engine := gin.Default()
    	engine.Any("/hello", WebRoot)
    	engine.Run(": 9205")
    }
    
    func WebRoot(ctx *gin.Context){
           
    	ctx.JSON(http.StatusOK, gin.H{
                   //以JSON格式的数据响应用户请求
    		"code": 200,
    		"message": "hello world",
    	})
    }
    

    Go Gin框架入门_第1张图片

  • gin.Context:封装了http.Request、Params等内容的结构体,保存了请求的上下文信息,提供了丰富的方法用于获取当前请求的上下文信息,如果需要获取请求中的 URL 参数、Cookie、Header 都可以通过 Context 对象来获取。这一系列方法本质上是对 http.Request 对象的包装。

    type Context struct {
           
    	writermem responseWriter
    	Request   *http.Request
    
    	// 传递接口,使用各个处理函数,更加灵活,降低耦合
    	Writer    ResponseWriter
    	
    	Params   Params				// 路径当中的参数
    	handlers HandlersChain		// 处理函数的数组
    	index    int8				// 目前在运行着第几个处理函数
    
    	engine   *Engine
    	Keys     map[string]interface{
           }  // 各个中间件添加的key value
    	Errors   errorMsgs
    	Accepted []string
    }
    

    Context 对象提供了很多内置的响应形式,JSON、HTML、Protobuf 、MsgPack、Yaml 等。它会为每一种形式都单独定制一个渲染器。所有的渲染器最终还是需要调用内置的 http.ResponseWriter(Context.Writer) 将响应对象转换成字节流写到套接字中。

    //动态路由(参数路由)
    func main(){
           
    	engine := gin.Default()
    	engine.GET("/user/:name", GetUserName)
    	engine.Run(": 9090")
    }
    func GetUserName(ctx *gin.Context){
           
    	name := ctx.Param("name")
    
    	ctx.JSON(http.StatusOK, name)
    }
    

    在这里插入图片描述
    除了可以使用gin.Context的Param()方法外,还可以使用Params字段获取path中的参数。(path是请求的url中域名之后从/开始的部分,例如http://127.0.0.1:9090/user,/user就是path)

    id, err := ctx.Params.Get("id")
    id := ctx.Params.ByName("id")

    Query()是指url请求地址中问号后面的查询参数,例如https://juejin.im/search?query=%E6%96%87%E7%AB%A0&type=all中,query=%E6%96%87%E7%AB%A0&type=all就是查询参数。gin.Context提供

  • gin.H:一个map的数据结构。

路由组
  • gin.RouterGroup,是对路由树的包装,所有的路由规则最终都由它来进行管理。Engine结构体继承了RouterGroup,所以 Engine 直接具备了 RouterGroup 所有的路由管理功能。
  • RouterGroup 实现了 IRouter 接口,暴露了一系列路由方法,这些方法最终都是通过调用 Engine.addRoute 方法将请求处理器挂接到路由树中。
  • RouterGroup 内部有一个前缀路径属性,它会将所有的子路径都加上这个前缀再放进路由树中。有了这个前缀路径,就可以实现 URL 分组功能。Engine 对象内嵌的 RouterGroup 对象的前缀路径是 /,它表示根路径。RouterGroup 支持分组嵌套,使用 Group 方法就可以让分组下面再挂分组。

【参考文档】轻量级 Web 框架 Gin 结构分析
golang轻量级框架-Gin入门
Gin - 高性能 Golang Web 框架的介绍和使用
Go Web轻量级框架Gin学习系列:数据绑定

你可能感兴趣的:(golang)