gin框架

发布时间 2023-09-12 22:08:18作者: 修凡

1 gin框架安装

GitHub地址:https://github.com/gin-gonic/gin

  • 安装

    go get -u github.com/gin-gonic/gin
    
  • 第一个Gin示例:

    package main
    
    import (
    	"github.com/gin-gonic/gin"
    )
    
    func main() {
    	// 创建一个默认的路由引擎
    	r := gin.Default()
    	// GET:请求方式;/hello:请求的路径
    	// 当客户端以GET方法请求/hello路径时,会执行后面的匿名函数
    	r.GET("/hello", func(c *gin.Context) {
    		// c.JSON:返回JSON格式的数据
    		c.JSON(200, gin.H{
    			"message": "Hello world!",
    		})
    	})
    	// 启动HTTP服务,默认在0.0.0.0:8080启动服务
    	r.Run()
    }
    
    

    将上面的代码保存并编译执行,然后使用浏览器打开127.0.0.1:8080/hello就能看到一串JSON字符串。

  • 或者先写好代码,然后在终端中运行

    go mod tidy
    

​ 会自动下载所需依赖,并添加到go.mod中

2 gin hello world

  • 第一个Gin示例:

    package main
    
    import (
    	"github.com/gin-gonic/gin"
    )
    
    func main() {
    	// 创建一个默认的路由引擎
    	router := gin.Default()
    	// GET:请求方式;/hello:请求的路径
    	// 当客户端以GET方法请求/hello路径时,会执行后面的匿名函数
    	router.GET("/hello", func(c *gin.Context) {
    		// c.JSON:返回JSON格式的数据
    		c.JSON(200, gin.H{
    			"message": "Hello world!",
    		})
    	})
    	// 启动HTTP服务,默认在0.0.0.0:8080启动服务
    	router.Run()
    }
    
    

​ 将上面的代码保存并编译执行,然后使用浏览器打开127.0.0.1:8080/hello就能看到一串JSON字符串。

两种启动方式

// 启动方式一
router.Run("0.0.0.0:8080")
// 启动方式二
http.ListenAndServe("0.0.0.0:8080", router)

3 响应

状态码

状态码是在计算机通信和网络协议中使用的一种标识,用于表示请求的处理结果或错误状态。常见的状态码包括HTTP状态码、TCP/IP状态码和操作系统错误码等。

HTTP状态码是在HTTP协议中使用的一种状态指示,用于表示HTTP请求的处理结果。以下是一些常见的HTTP状态码及其含义:

  • 200 OK:请求成功,服务器成功处理了请求。
  • 201 Created:请求成功并且服务器创建了新的资源。
  • 400 Bad Request:请求无效,服务器无法理解请求的语法或参数。
  • 401 Unauthorized:未经授权,请求需要用户身份验证。
  • 403 Forbidden:禁止访问,服务器拒绝请求访问资源。
  • 404 Not Found:未找到,服务器无法找到请求的资源。
  • 500 Internal Server Error:服务器内部错误,服务器遇到意外情况无法完成请求。

返回字符串

router.GET("/txt", func(c *gin.Context) {
  c.String(http.StatusOK, "返回txt")
})

返回json

router.GET("/json", func(c *gin.Context) {
  c.JSON(http.StatusOK, gin.H{"message": "hey", "status": http.StatusOK})
})
// 结构体转json
router.GET("/moreJSON", func(c *gin.Context) {
  // You also can use a struct
  type Msg struct {
    Name    string `json:"user"`
    Message string
    Number  int
  }
  msg := Msg{"fengfeng", "hey", 21}
  // 注意 msg.Name 变成了 "user" 字段
  // 以下方式都会输出 :   {"user": "hanru", "Message": "hey", "Number": 123}
  c.JSON(http.StatusOK, msg)
})

返回xml

router.GET("/xml", func(c *gin.Context) {
  c.XML(http.StatusOK, gin.H{"user": "hanru", "message": "hey", "status": http.StatusOK})
})CopyErrorOK!

返回yaml

router.GET("/yaml", func(c *gin.Context) {
  c.YAML(http.StatusOK, gin.H{"user": "hanru", "message": "hey", "status": http.StatusOK})
})