gin 框架 基本构成

Posted

tags:

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

参考技术A 四个核心概念,看源码想不明白的时候,就回头多看几眼,有助于成长.

Engine顾名思义:引擎. 是gin框架的基础,这还真不是一句废话,确实是这样.Engine在项目启动时候生成,支撑gin框架的运转.

下面的七个词插入会让这个路由变成这个样子:

如果想知道实现细节,看源码就好了.
不知道细节也没关系,不耽误我们增删改查.你只要知道用一个算法,你做路由注册的时候,最后路由器为每种请求方法管理一棵单独的树.一共九种http请求方式,那就是九个这样的树.(添加树节点操作).当请求过来的时候,天然的已经增加了查找的效率,找到对应的树后,又用这个树再猛的查一下,完犊子,就很快.这就够了.(查找树节点)

context就是某个请求的上下文结构.Context中一个是Request,一个是ResponseWriter.很明显,请求\返回都有了.剩下的所有的方法都是围绕这两个东西发生的.一个请求一个Context.

处理函数.不仅是我们的增删改查方法.框架写好的中间件,你自己写的自定义中间件都在这个范畴.
每个请求进来匹配到路由后,我们会将一个路由的中间件函数和处理函数结合到一起组成一条处理函数链条HandlersChain,而它本质上就是一个由HandlerFunc组成的切片.
然后通过调用context.Next()来进行递归调用这个handlers.

Golang Gin 框架入门介绍

目录

  • 前言
  • 正文
    • 一、定义 GET, POST, PUT, PATCH, DELETE 和 OPTIONS 的接口
    • 二、解析 path 中的参数
  • 结尾

前言

Gin 是使用纯 Golang 语言实现的 HTTP Web 框架,Gin 的接口设计简洁,性能极高,现在被广泛使用。上一篇文章介绍了 Gin 的基本使用方式,今天我们详细看一看 Gin 在接口定义和参数解析方面的内容。

正文

一、定义 GET, POST, PUT, PATCH, DELETE 和 OPTIONS 的接口

package main

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

func main() 
	// 创建一个默认的 gin 路由器
	router := gin.Default()

        // 定义一个Get类型的服务接口
	router.GET("/someGet", getting)
        // 定义一个Post类型的服务接口
	router.POST("/somePost", posting)
        // 定义一个Put类型的服务接口
	router.PUT("/somePut", putting)
        // 定义一个DELETE类型的服务接口
	router.DELETE("/someDelete", deleting)
        // 定义一个Patch类型的服务接口
	router.PATCH("/somePatch", patching)
        // 定义一个Head类型的服务接口
	router.HEAD("/someHead", head)
        // 定义一个Options类型的服务接口
	router.OPTIONS("/someOptions", options)

        // 启动服务,默认监听8080端口,或者通过PORT环境变量设置
	router.Run()

通过简单的编码,基于 Gin 的服务器就支持了多种类型请求的服务接口。另外,在服务启动的时候,我们也可以通过直接指明端口的方式来设置服务监听的端口,比如下面的方式:

router.Run(":3001")

上面的语句,我们可以知道服务监听了 3001 端口。

二、解析 path 中的参数

下面介绍几种 path 中存在参数时,如何解析的情况,具体请看下面的代码示例。

package main

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

func main() 
	router := gin.Default()

	// 可以匹配 /user/john,但是不能匹配 /user/ 和 /user 请求
	router.GET("/user/:name", func(c *gin.Context) 
		name := c.Param("name")
		c.String(http.StatusOK, "Hello %s", name)
	)

	// 可以匹配 /user/john/ 和 /user/john/send
	router.GET("/user/:name/*action", func(c *gin.Context) 
		name := c.Param("name")
		action := c.Param("action")
		message := name + " is " + action
		c.String(http.StatusOK, message)
	)

	// 对于每个匹配的请求,上下文将保存路由定义
	router.POST("/user/:name/*action", func(c *gin.Context) 
		c.FullPath() == "/user/:name/*action" // true
	)

	router.Run(":8080")

可以看出,解析 path 中的参数时需要注意的细节还是非常多的。

结尾

好了,今天关于 Gin 在接口定义和参数解析方面的内容就介绍完了,后续内容敬请期待,感谢!

作者简介:大家好,我是 liuzhen007(Data-Mining),是一位音视频技术爱好者,同时也是CSDN博客专家、华为云社区云享专家、签约作者,欢迎关注我分享更多干货!

以上是关于gin 框架 基本构成的主要内容,如果未能解决你的问题,请参考以下文章

Gin基本使用

gin框架路由拆分与注册

gin框架路由拆分与注册

gin框架路由拆分与注册

gin框架路由拆分与注册

Gin框架快速入门