gin框架的使用

92 阅读3分钟

gin使用

1.什么是gin?

gin是基于go编写http的web服务框架,Web 服务是"网络服务"(Web Service),其本质就是通过网络调用其他网站的资源。通过80端口向外界提供网页访问。有了gin就可以从外面通过网址访问应用的页面。例如,在搜索栏输入网址就可以找到相应页面,网址则是在gin框架里定义

2.如何使用gin?

2.1 使用gin:需先准备go环境

通过该命令将gin添加到你的项目中

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

2.2 创建一个简单的web服务

例子如下:

package main

import "github.com/gin-gonic/gin"     //导入gin包到go文件

func main() {
	r := gin.Default()   //创建gin.Default()引擎实例
	r.GET("/ping", func(c *gin.Context) {
		c.JSON(200, gin.H{         //处理响应
			"message": "pong",
		})
	})
	r.Run() // listen and serve on 0.0.0.0:8080
}

web服务详细分析:

  • 该gin.Default()函数可以做以下五件事:
    1. 创建一个Gin引擎实例。如:r := gin.Default()

    2. 设置了默认的日志中间件,用于记录每个请求的信息,如请求方法、路径、响应状态码等。如router.GET("/hello", func(c *gin.Context) { c.JSON(200, gin.H{ "message": "Hello, World!", }) })。c *gin.Context是处理 HTTP 请求的上下文对象

      • 用来存储请求和响应的信息
        1. Request相关信息:

        2. ResponseWriter相关信息:

        3. 参数和路径信息:

          • 路由参数:使用:定义,如/user/:id,路由参数是可选的,即使没有提供参数值,路由仍然可以匹配
          • 路径参数:使用{}定义,如/user/{id},路径参数必须提供参数值才能使路由匹配成功
          • 都通过c.Param方法获取参数 c.Param("name")
        4. 查询参数和表单数据:

          • 查询参数是通过 URL 的查询字符串传递的参数,查询字符串是 URL 中位于问号(?)后面的部分,用于传递键值对的参数
          • 表单参数:通过 HTTP 请求的请求体传递的参数。使用POST请求
        5. Cookies 相关信息:

          • 请求中的 Cookie
          • 设置响应的 Cookie
      • 提供一系列方法来处理请求和响应
        1. 处理请求:
          • c.Request:获取请求信息,如c.Request.Method,c.Request.Cookie("cookie_name")
          • c.Params:获取路由参数
          • c.Query:获取 URL 查询参数
          • c.PostForm:获取表单参数
        2. 处理响应:
          • c.JSON:以 JSON 格式响应数据给客户端。
          • c.String:以纯文本格式响应数据给客户端。
          • c.HTML:渲染 HTML 模板并响应给客户端。
          • c.Redirect:执行重定向到其他路径或 URL。
          • c.Abort:终止请求的处理,不再执行后续的中间件和处理函数
    3. 设置了默认的恢复中间件,用于在应用程序发生恐慌(panic)时恢复并返回一个500内部服务器错误响应。如 router.GET("/panic", func(c *gin.Context) { panic("Oops! Something went wrong.") })

    4. 设置了默认的错误处理中间件,用于捕获和处理路由处理函数中产生的错误。if err != nil { // 将错误信息作为响应返回给客户端 c.JSON(500, gin.H{ "error": err.Error(), }) return }

    5. 启用了Gin框架的路由功能。如:r.GET("ping", bbsApi.GetXkBbs),r.POST("ping", bbsApi.GetXkBbs) 当客户端向"/ping"路径发起GET请求时,执行对应的处理函数

2.3路由组分组

例子如下:

v1 := router.Group("/v1") { v1.GET("/user/:id", getUserByID) v1.POST("/user", createUser) }

2.4文件上传

文章推荐 gin框架及介绍使用

总结:

  1. 在看程序时,分析问题时先分类:分清楚处理请求还是在处理响应。
  2. 请求参数,要传递数据一般只有两种方法:查询参数和表单参数。细节看文章
  3. 无法请求到页面,先查看网址,gin里是否定义的正不正确。如非网址问题则是未在gin中注册路由,网址的写法只有四种:
    • 表单参数: 网址/user/search,使用post请求,则使用c.PostForm("username")获取参数
    • 查询参数:用?号定义传递参数。使用get请求 example.com/path?param1…
    • 路径参数:/user/{id},使用get请求 r.GET("/user/search/{username}/{address}",ser.getSer)
    • 路由参数:/user/:id,使用get请求 r.GET("/user/search/:username/:address",ser.getSer)

推荐文章

How to use Gin framework in golang for web development

gin快速开始

go with gin

gin框架及介绍使用