Gin框架学习笔记 | 青训营笔记

161 阅读2分钟

0 前言

这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天
对于大项目,目前的计划是采用 gin+gorm+mysql 的形式,所以学习gin的用法是很有必要的,在此记录一些我在学习gin时遇到的困惑和解答。

1 什么是 gin

引用官网的说法:

Gin是一个使用Go语言开发的Web框架。
它提供类似Martini的API,但性能更佳,速度提升高达40倍。
如果你是性能和高效的追求者, 你会爱上 Gin。

Gin作为一个成熟的web框架,支持高并发还拥有极高的性能,可以让我们在开发web应用时事半功倍,更加专注于业务逻辑的处理上。

2 如何使用 Gin

以下是官方提供的一段快速入门的代码:

package main

import "github.com/gin-gonic/gin"

func main() {
	r := gin.Default()
	r.GET("/ping", func(c *gin.Context) {
		c.JSON(200, gin.H{
			"message": "pong",
		})
	})
	r.Run() // 监听并在 0.0.0.0:8080 上启动服务
}

从上面这段代码我们看出Gin的启用大致可以分为三个步骤:

  1. 初始化路由
  2. 为不同的HTTP请求设置相应的处理函数
  3. 监听指定地址和端口,并在其基础上启用服务

可以看出Gin的使用是非常快速且便捷的

3 路由的初始化

在使用 gin.Default()/gin.new() 之前,我们可以通过 gin.SetMode(MODE) 进行模式的设置。通过查看SetMode的源码我们可以知道一共有三种模式

// SetMode sets gin mode according to input string.
func SetMode(value string) {
    if value == "" {
        value = DebugMode
    }

    switch value {
    case DebugMode:
        ginMode = debugCode
    case ReleaseMode:
        ginMode = releaseCode
    case TestMode:
        ginMode = testCode
    default:
        panic("gin mode unknown: " + value + " (available mode: debug release test)")
    }

    modeName = value
}

分别是:

  1. DebugMode
  2. ReleaseMode
  3. TestMode

其中Debug模式下Gin框架会打印出接收到的请求以及一些log信息,而release模式下则不会,默认采用Debug模式

4 设置处理函数

首先我们可以通过 Group 方法去对路由进行分组,将公共的路径提取出来,例如:

r := gin.Default()
apiRouter := r.Group("/douyin")
apiRouter.GET("/feed/", Feed)
apiRouter.POST("/user/login/", Login)

GET "/douyin/feed" 请求会交由Feed函数进行处理,类似的 POST "/douyin/user/login" 请求则会交给Login函数进行处理

5 路由地址的监听

我们可以通过在 run() 中输入ip地址和端口选择服务监听的地址, 如:

r.Run("127.0.0.1:8080")