Gin 快速入门

Go 版本要求

使用 Gin 框架之前,需要先检查本地 Go 语言版本,目前要求 Go 1.9 及以上版本,Go 1.7 及 1.8 版本将很快不再提供支持。

go version

-w677

安装 & 初始化项目

GOPROXYGOPROXY
srcgin-demo/basic

-w337

basicgo mod init gin-demo/basicgo.modgo get -u github.com/gin-gonic/gin

-w602

Gin 扩展包下载完成后,即可下载项目示例代码到本地:

curl https://raw.githubusercontent.com/gin-gonic/examples/master/basic/main.go > main.go

-w916

main.go
package main

import (
  "net/http"

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

// 通过字典模拟 DB
var db = make(map[string]string)

func setupRouter() *gin.Engine {
  // 初始化 Gin 框架默认实例,该实例包含了路由、中间件以及配置信息
  r := gin.Default()

  // Ping 测试路由
  r.GET("/ping", func(c *gin.Context) {
    c.String(http.StatusOK, "pong")
  })

  // 获取用户数据路由
  r.GET("/user/:name", func(c *gin.Context) {
    user := c.Params.ByName("name")
    value, ok := db[user]
    if ok {
      c.JSON(http.StatusOK, gin.H{"user": user, "value": value})
    } else {
      c.JSON(http.StatusOK, gin.H{"user": user, "status": "no value"})
    }
  })

  // 需要 HTTP 基本授权认证的子路由群组设置
  authorized := r.Group("/", gin.BasicAuth(gin.Accounts{
    "foo":  "bar", // 用户名:foo 密码:bar
    "manu": "123", // 用户名:manu 密码:123
  }))

  // 保存用户信息路由
  authorized.POST("admin", func(c *gin.Context) {
    user := c.MustGet(gin.AuthUserKey).(string)

    // 解析并验证 JSON 格式请求数据
    var json struct {
      Value string `json:"value" binding:"required"`
    }

    if c.Bind(&json) == nil {
      db[user] = json.Value
      c.JSON(http.StatusOK, gin.H{"status": "ok"})
    }
  })

  return r
}

func main() {
  // 设置路由信息
  r := setupRouter()
  // 启动服务器并监听 8080 端口
  r.Run(":8080")
}

具体代码含义已经通过注释标注了,这里定义了三个路由,分别用于测试请求是否可以 Ping 通、获取用户信息及设置用户信息,下面我们启动这个应用:

 go run main.go

-w868

可以看到 HTTP 服务器已经启动成功(默认以“debug”模式启动),并且打印出了路由信息。

curl

-w743

-w1049

-w869

main.go