千恋*万花

  • 首页
  • 个人简历
  • 文章分类
    • 后端开发
    • 运维
    • 基础知识
    • 笔记
    • 工作运维记录
    • 随笔
    • 未分类文章
  • 管理
    • 后台管理
    • 登出
萌奈の笔记簿
分享我的努力,希望为你助力
  1. 首页
  2. 后端开发
  3. gin
  4. 正文

Gin网络请求与路由处理——Go Gin框架(二)

2020-10-02 3548点热度 3人点赞 0条评论

创建Engine(引擎)

Engine代表Gin框架的一个结构体定义。
其中包括了路由组、中间件、页面渲染接口、框架配置设置等相关内容

Engine 有以下两种创建方式:

engine1 = gin.Default() //通常使用,会默认使用Logger和Recovery中间件
engine2 = gin.New()

Recovery中间件的作用是:如果程序执行过程中遇到了panic中断了服务,Recovery会恢复程序的执行,并返回服务器500内部错误。
Logger负责打印并输出日志的中间件,方便我们开发调试。

实际上 gin.Default() 内部也是调用 gin.New() 来实现的,但是前者添加了上述两个中间件。

用Engine处理HTTP请求

在实例engine中,包含很多种方法可以直接处理不同类型的HTTP请求。

HTTP协议中义工定义了八种操作方式,分别是:OPTIONS、HEAD、GET、POST、PUT、DELETE、TRACE、CONNECT。
实际上开发上常用的也只有GET、POST、DELETE等几种操作方式。

通用处理请求

engine中可以直接进行HTTP请求的处理,在engine中,可以使用Handle方法进行HTTP请求的处理。Handle方法包含三个参数,如下所示:

func (group *RouterGroup) Handle(httpMethod, relativePath string, handles ...HandlerFunc) IRoutes
  • httpMethod string:第一个参数表示要处理的HTTP的请求类型,是"GET"、"POST"、"DELETE"等八种操作方式的其中一种
  • relativePath string:第二个参数表示要解析的接口,由开发者定义。
  • handlers Handlerfunc:第三个参数是处理对应的请求的代码的定义。

分类处理请求

func (group *RouterGroup) POST(relativePath string, handlers ...HandlerFunc) IRoutes
func (group *RouterGroup) GET(relativePath string, handlers ...HandlerFunc) IRoutes
func (group *RouterGroup) DELETE(relativePath string, handlers ...HandlerFunc) IRoutes
//等几个常用的请求处理方法

每个参数的具体含义,请参考通用处理请求中的参数说明。

实例

package main

import (
    "fmt"
    "github.com/gin-gonic/gin"
)

func main() {
    engine := gin.Default()
    //第一种处理http请求的方法,使用handle
    //访问 /hello?name=xxxxx
    engine.Handle("GET", "/hello", func(context *gin.Context) {
        //context里面封装了一个上下文环境变量,在这里面当中有我们经常操作的属性或者方法。
        path := context.FullPath() //获取我们本次请求的接口
        fmt.Println(path)
        //获取GET中的参数
        name := context.DefaultQuery("name", "null") //获取具体参数,1.哪个字段 2.若获取不到的默认值
        fmt.Println(name)
        //输出
        _, _ = context.Writer.Write([]byte("hello, " + name))
    })
    //第二种处理http请求的方法(分类处理)
    //访问 /login
    engine.POST("/login", func(context *gin.Context) {
        fmt.Println(context.FullPath())
        //解析POST
        username := context.PostForm("username")
        //这种方法会返回是否成功获取Form里的值,以进行判断
        password, 获取成功 := context.GetPostForm("password")
        if 获取成功 {
            fmt.Println(username, "n", password)
            _, _ = context.Writer.Write([]byte(username + "登录,密码为:" + password))
        }
    })

    //delete
    //在访问路径中,指定id的方法
    //即:/delete/user/123或/delete/user/456(最后一项是一个变量)
    engine.DELETE("/delete/user/:id", func(context *gin.Context) {
        //获取路径中的变量值
        userID := context.Param("id")
        fmt.Println("删除用户:" + userID)
        context.Writer.Write([]byte("删除用户:"+userID))
    })
    //运行这个引擎
    _ = engine.Run(":8088")
}

上述示例代码中,包含了几个新的函数:

  • func (c *Context) FullPath() string: 该函数返回被访问路由的全路径。对于没有找到的路径,返回空
  • func (c *Context) DefaultQuery(key string, defaultValue string) string: 该函数用于GET请求中,用于获取GET请求中的参数。
    • key string:要获取GET请求中的哪个字段
    • defaultValue string:若获取不到则返回的默认值
  • func (c *Context) PostForm(key string) string
  • func (c *Context) GetPostForm(key string) (string, bool): 这两个函数用于获取POST请求中的参数。
    • key string:要获取POST请求中的哪个字段
    • GETPostForm 的第二个bool返回值,用于返回是否成功获取到该字段
  • func (c *Context) Param(key string) string: 用于获取访问路径中的参数值。
    • key string:要获取访问路径请求中的哪个字段,该字段在路径中的表示方法为/:key
  • func (ResponseWriter) Write([]byte) (int, error):用于向浏览器端输出。(返回值占时不知道含义)
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
标签: Gin Gin框架 go golang Golang 心得 web web框架 学习心得 框架
最后更新:2022-10-27

初音萌奈

我是练习时长 一年半 的后端开发程序员 谢谢你参观我的博客! 本网站现已支持IPv6 ☞ 个人简历 ☜

点赞
< 上一篇
下一篇 >
文章目录
  • 创建Engine(引擎)
  • 用Engine处理HTTP请求
    • 通用处理请求
    • 分类处理请求
    • 实例

COPYRIGHT © 2023 HatsuneMona ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

晋ICP备17007130号-4