https://blog.csdn.net/qq_45875349/article/details/127942350
https://gin-gonic.com/zh-cn/
https://github.com/gin-gonic/gin

mkdir demoApi
cd demoApi
go mod init demoApi

安装gin包
go get -u github.com/gin-gonic/gin

引入
import "github.com/gin-gonic/gin"
import "net/http"

拷贝一个初始模板到你的项目里
curl https://raw.githubusercontent.com/gin-gonic/examples/master/basic/main.go > main.go


运行
go run main.go

测试
http://localhost:8080/ping
http://localhost:8080/user/aaaa

gin热加载

go get github.com/pilu/fresh
启动
fresh

main.go 模板

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

package main

import (
    "net/http"

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

var db = make(map[string]string)

func setupRouter() *gin.Engine {
    // Disable Console Color
    // gin.DisableConsoleColor()
    r := gin.Default()

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

    // Get user value
    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"})
        }
    })

    // Authorized group (uses gin.BasicAuth() middleware)
    // Same than:
    // authorized := r.Group("/")
    // authorized.Use(gin.BasicAuth(gin.Credentials{
    //      "foo":  "bar",
    //      "manu": "123",
    //}))
    authorized := r.Group("/", gin.BasicAuth(gin.Accounts{
        "foo":  "bar", // user:foo password:bar
        "manu": "123", // user:manu password:123
    }))

    /* example curl for /admin with basicauth header
       Zm9vOmJhcg== is base64("foo:bar")

        curl -X POST \
          http://localhost:8080/admin \
          -H 'authorization: Basic Zm9vOmJhcg==' \
          -H 'content-type: application/json' \
          -d '{"value":"bar"}'
    */
    authorized.POST("admin", func(c *gin.Context) {
        user := c.MustGet(gin.AuthUserKey).(string)

        // Parse 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()
    // Listen and Server in 0.0.0.0:8080
    r.Run(":8080")
}