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

1、在是这么介绍的

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 ", name)) } func register(c *gin.Context) { name := c.DefaultQuery("name", "lily") c.String(http.StatusOK, fmt.Sprintf("hello %s ", 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) } //可以试试 打印结果
经验分享 程序员 微信小程序 职场和发展