Gin框架的大致使用方法(详细)

Gin框架的大致使用方法(详细),第1张

1、在gin框架中文文档是这么介绍的

Gin 是一个用 Go (Golang) 编写的 web 框架。 它是一个类似于 martini 但拥有更好性能的 API 框架,由于 httprouter,速度提高了近 40 倍。 如果你是性能和高效的追求者,你会爱上 Gin。两款Web框架相比较,Gin自己说他比Martini要强很多。

2、Gin的基本使用方法

首先在项目终端下载安装gin包:

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

举一个简单的例子:

package main

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

func main() {
    //Default返回一个默认的路由引擎
    r := gin.Default()
    r.GET("/ping", func(c *gin.Context) { // /ping是路由
        //输出json结果给调用方
        c.JSON(200, gin.H{
            "message": "pong",
        })
    })
  r.Run(":8081") // 可以从本地的127.0.0.1:8081访问,不填的话,默认是8080端口
}

go run main.go 运行程序,打开浏览器访问http://127.0.0.1:8081/ping页面,最终显示:

{"message":"pong"} // 这就是返回给前端的数据
3、Gin框架中的路由使用

gin路由,路由的基本使用,按路由组分组处理请求

package main

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

// gin的helloWorld

func main() {
   // 1.创建路由
   r := gin.Default()
   // 路由组1 ,处理GET请求
   v1 := r.Group("api/v1")
   // {} 是书写规范
   {
      v1.GET("/register", register)
      v1.GET("login", login)
   }
   v2 := r.Group("api/v2")
   {
      v2.POST("/register", register)
      v2.POST("/login", login)
   }
   r.Run(":8000") // 开启端口在8000
}

func login(c *gin.Context) {
   name := c.DefaultQuery("name", "jack")
   c.String(http.StatusOK, fmt.Sprintf("hello %s\n", name))
}

func register(c *gin.Context) {
   name := c.DefaultQuery("name", "lily")
   c.String(http.StatusOK, fmt.Sprintf("hello %s\n", name))
}
4、gin中的数据绑定

gin数据解析和绑定(JSON举例)

package main

import (
   "github.com/gin-gonic/gin"
   "net/http"
)

// 定义接收数据的结构体
type Login struct {
   // binding:"required"修饰的字段,若接收为空值,则报错,是必须字段
   User    string `json:"user" binding:"required"`
   Pssword string `json:"password" binding:"required"`
}

func main() {
   // 1.创建路由
   r := gin.Default()
   // JSON绑定
   r.POST("loginJSON", func(c *gin.Context) {
      // new结构体,给结构体分配内存
     login := new(Login)
      // 将request的body中的数据,自动按照json格式解析到结构体
      if err := c.ShouldBindJSON(&login); err != nil {
         // 返回错误信息
         // gin.H封装了生成json数据的工具
         c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
         return
      }
      c.JSON(http.StatusOK, gin.H{"status": "200"})
   })
   r.Run(":8000")
}
5、gin的中间件使用

next()方法!

func myMiddleWare() gin.HandlerFunc {
	return func(ctx *gin.Context) {
		fmt.Println("before")
		ctx.Next()
		fmt.Println("after")
	}
}
// Next()函数相当于一个分割线,在Next()函数之前的在Handler之前执行,Next()函数之后的在Handler之后执行

Gin中间件

// 定义程序计时中间件,然后定义2个路由,执行函数后应该打印统计的执行时间,如下:
package main

import (
    "fmt"
    "time"

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

// 定义中间
func myTime(c *gin.Context) {
    start := time.Now()
    c.Next()
    // 统计时间
    since := time.Since(start)
    fmt.Println("程序用时:", since)
}

func main() {
    // 1.创建路由
    // 默认使用了2个中间件Logger(), Recovery()
    r := gin.Default()
    // 注册中间件
    r.Use(myTime)
    // {}为了代码规范
    shoppingGroup := r.Group("/shopping")
    {
        shoppingGroup.GET("/index", shopIndexHandler)
        shoppingGroup.GET("/home", shopHomeHandler)
    }
    r.Run(":8000")
}

func shopIndexHandler(c *gin.Context) {
    time.Sleep(5 * time.Second)
}

func shopHomeHandler(c *gin.Context) {
    time.Sleep(3 * time.Second)
}
//可以试试 打印结果

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/996274.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存