Gin 快速开发 | 01 - Gin 入门

793 阅读2分钟

我正在参与掘金创作者训练营第5期,点击了解活动详情

一、Gin 入门

Gin 安装

Gin 官网介绍 Gin 是 Go语言最快的全功能Web框架

什么是Gin?

Gin是一个使用Go语言开发的Web框架。

它提供类似Martini的API,但性能更佳,速度提升高达40倍。

如果你是性能和高效的追求者, 你会爱上 Gin。

Gin 框架具有 API 友好,注释明确,具有快速灵活、容错方便等特点。

新创建一个 Go 项目 gin-quickstart,在该项目目录下执行 Gin 安装命令。

go get -u github.com/gin-gonic/gin

image.png

查看项目目录下的 go.mod 文件,多处很多相关的依赖。

image.png

创建 main.go 文件,输入如下代码:

// filename main.go

package main

// 导入 gin 依赖
import (
   "github.com/gin-gonic/gin"
)

func main(){

   // 创建路由 engine
   r := gin.Default()

   // 路由绑定函数
   r.GET("/", func(context *gin.Context) {
      context.String(200, "Hello, Gin Web")
   })

   // 启动,绑定端口
   r.Run(":8080")

}

执行 main 文件,浏览器访问 localhost:8080

image.png

二、Gin 工作流程

Gin 核心对象

  • Engine:容器对象,是整个 Gin 框架的基础
  • Engine.trees:负责存储路由和 handle 方法的映射,类似字典树的结构
  • Engine.RouterGroup:RouteGroup 结构体中的 Handlers 存储着所有的中间件。
  • Context:上下文对象,负责处理请求和响应,其中的 handlers 存储处理请求时中间件和处理方法。

Gin 启动流程

image.png

gin.Default()

Default() 函数返回一个已经添加了 Logger 和 Recovery 中间件的 Engine 实例,通过 engine.User() 注册了中间件。

image.png

Default() 函数中通过 gin.New() 方法来初始化 Engine 容器,初始化时进行了以下几个操作

  • 将 RouterGroup 的 Handlers(数组) 设置成 nil, basePath 设置成 ”/“。
  • RouterGroup 里面也有一个 Engine 指针,将刚刚初始化的 engine 赋值给了 RouterGroup 的 engine。
  • 使用了 sync.Pool 专门存储 gin 的 Context,防止频繁的 GC 造成的低效。

r.GET() 注册路由

通过 GET 方法将路由映射到指定的函数。

image.png

handle 方法中奖处理请求的函数与中间件函数绑定并调用 addRoute 方法注册路由。

image.png

r.Run()

该方法中通过调用 net/http 启动服务, 传递 engine 对象来实现服务启动

image.png