golang网络框架gin初探索|青训营笔记

82 阅读1分钟

这是我参与[第五届青训营]的第十天。

package main

import (
    "net/http"

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

//handle方法
func Pong(c *gin.Context) {
    c.JSON(http.StatusOK, gin.H{
        "name":   "ice_moss",
        "age":    18,
        "school": "bili大学",
    })
}

func main() {
    //初始化一个gin的server对象
    //Default实例化对象具有日志和返回状态功能
    r := gin.Default()
  //注册路由,并编写处理方法
    r.GET("/ping", Pong)
    //监听端口:默认端口listen and serve on 0.0.0.0:8080
    r.Run(":8083")
}

  • gin 的 GET 和 POST 方法
package main

import (
    "net/http"

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

func GinGet(c *gin.Context) {
    c.JSON(http.StatusOK, map[string]interface{}{
        "name": "ice_moss",
    })
}

func GinPost(c *gin.Context) {
    c.JSON(http.StatusOK, gin.H{
        "token": "您好",
    })
}
func main() {
    router := gin.Default()
    router.GET("/GinGet", GinGet)
    router.POST("/GinPost", GinPost)
    router.Run(":8083")
}

路由分组

//路由分组
func main() {
    router := gin.Default()

  //未使用路由分组
    //获取商品列表
    //router.GET("/ProductList", ProductLists)
    //获取某一个具体商品信息
    //router.GET("/ProductList/1", Prouduct1)
    //添加商品
    //router.POST("ProductList/Add", CreateProduct)

    //路由分组
    ProductList := router.Group("/Produc")
    {
        ProductList.GET("/list", ProductLists)
        ProductList.GET("/1", Prouduct1)
        ProductList.POST("/Add", CreateProduct)
    }
    router.Run(":8083")
}

URL 值的提取

很多时候我们需要对 URL 中数据的提取,或者动态的 URL,我们不可能将 URL 写固定。

package main

import (
    "net/http"

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

func ProductLists(c *gin.Context) {
    c.JSON(http.StatusOK, gin.H{
        "candy":  [5]string{"6", "9", "500"},
        "cookie": [3]string{"9", "6", "200"},
    })
}

func Prouduct1(c *gin.Context) {
    //获取url中的参数
    id := c.Param("id")
    action := c.Param("action")
    c.JSON(http.StatusOK, gin.H{
        "candy":    [5]string{"9", "6", "500"},
        "id":     id,
        "action": action,
    })
}

func CreateProduct(c *gin.Context) {}

//url取值
func main() {
    router := gin.Default()
    //路由分组
    ProductList := router.Group("/Product")
    {
        ProductList.GET("", ProductLists)
        //使用"/:id"动态匹配参数
        ProductList.GET("/:id/:action", Prouduct1)
        ProductList.POST("", CreateProduct)
    }
    router.Run(":8083")
}

构体体声明并做约束

package main

import (
    "net/http"

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

//结构体声明,并做一些约束
type Porsen struct {
    ID   int    `uri:"id" binding:"required"`    //uri指在client中的名字为id,binding:"required指必填
    Name string `uri:"name" binding:"required"`  //同理
}

//url参数获取
func main() {
    router := gin.Default()
    router.GET("/:name/:id", func(c *gin.Context) {
        //使用porsen对数据进行解组
        var porsen Porsen
        if err := c.ShouldBindUri(&porsen); err != nil {
            c.Status(404)
            return
        }
        c.JSON(http.StatusOK, gin.H{
            "name": porsen.Name,
            "id":   porsen.ID,
        })
    })
    router.Run(":8083")
}