gin-go轻量级Web框架

2022年2月14日 308点热度 0人点赞 0条评论

✨ 介绍

Gin是Go轻量级Web框架。

图片

其特点有:

  • 零分配路由。

  • 仍然是最快的 http 路由器和框架,快,快,还是快!

  • 完整的单元测试支持。

  • API 冻结,新版本的发布不会破坏你的代码。

? API用法

该部分内容主要包括JSON支持、XML/YMAL/ProtoBuf渲染、文件上传与下载、模板渲染、数据绑定等。

1️⃣ AsciiJSON/PureJSON/SecureJSON

Go语言对各种JSON格式的支持。

  • AsciiJSON

package main

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

func main() {

    r := gin.Default()

    r.GET("/someJson", func(c *gin.Context) {
    data := map[string]interface{}{
        "lang": "Go语言",
        "teg": "<br>",
}
    c.AsciiJSON(http.StatusOK, data)
})
    r.Run() // 服务默认在8080端口启动
}

请求http://localhost:8080/someJson,页面返回:

图片

  • PureJSON按照字面值对字符进行编码

package main

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

func main() {
    r := gin.Default()
    r.GET("/purejson", func(c *gin.Context) {
    c.PureJSON(200, gin.H{
        "html": "<b>Hello, world!</b>",
    })
})
r.Run()
}

请求页面返回:

图片

  • SecureJSON 防止 json 劫持

package main

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

func main() {
    r := gin.Default()
    r.GET("/somejson", func(c *gin.Context) {
        name := []string{"lena", "austin", "foo"}
        c.SecureJSON(200, name)
})
    r.Run()
}

请求页面返回:

图片

返回默认加上while(1)

2️⃣ XML/YMAL/ProtoBuf渲染

Gin对于XML、YAML等常见配置文件格式支持:

package main

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

func main() {
    r := gin.Default()
    r.GET("/somexml", func(c *gin.Context) {
    c.XML(http.StatusOK, gin.H{"message": "hey", "status": http.StatusOK})

})

    r.GET("/someyml", func(c *gin.Context) {
        c.YAML(http.StatusOK, gin.H{"message": "hey", "status": http.StatusOK})
})

    r.GET("/someProtoBuf", func(c *gin.Context) {
    reps := []int64{int64(1), int64(2)}
    label := "test"
    // protobuf 的具体定义写在 testdata/protoexample 文件中。
    data := &protoexample.Test{
    Label: &label,
    Reps:  reps,
}
    // 请注意,数据在响应中变为二进制数据
    // 将输出被 protoexample.Test protobuf 序列化了的数据
    c.ProtoBuf(http.StatusOK, data)
})
    r.Run()
}

XMl请求返回:

图片

YAML请求返回:

图片

以文件形式返回。ProtoBuf请求返回:

图片

以文件形式返回。

3️⃣ 文件上传与下载

单文件上传,代码示例:

package main

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

func main() {
    r := gin.Default()
    r.POST("/upload", func(c *gin.Context) {
    file,_ := c.FormFile("file")
    log.Println(file)

    c.SaveUploadedFile(file,"/src/"+file.Filename)
    c.String(http.StatusOK, fmt.Sprintf("%s upload!"),file.Filename)
})
    r.Run()
}

Postman调用截图:

图片

4️⃣ 模板渲染

Gin可以使用使用 LoadHTMLGlob() 或者 LoadHTMLFiles()进行模板渲染:

package main

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

func main() {
    r := gin.Default()
    r.GET("/index", func(c *gin.Context) {
    c.HTML(http.StatusOK, "index.tmpl", gin.H{
    "title": "Main website",
    })
})
    r.Run()
}

index.tmpl模板:

<html>
        <h1>
            {{ .title }}
        </h1>
</html>

请求返回页面截图:

图片

5️⃣ 数据绑定

Gin对于请求URL和表单数据的绑定支持:

package main

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

type Person struct {
    Name string `uri:"name" binding:"required"`
    Address string `uri:"address" binding:"required"`
}

func startPage(c *gin.Context) {
    var person Person
    if c.ShouldBindQuery(&person) == nil{
        log.Println("====== Only Bind By Query String ======")
        log.Println(person.Name)
        log.Println(person.Address)
}
    c.String(200, "Success")
}

func main() {
    r := gin.Default()
    // login请求
   r.GET("/login", func(c *gin.Context) {
        var form LoginForm
        if c.ShouldBind(&form) == nil {
            if form.User=="user" && form.Password=="password"{
                c.JSON(200, gin.H{
                "message": "You are logged in!",
})
        }else {
            c.JSON(200, gin.H{
            "message": "unauthorized",
        })
        }
    }
})
   // form_post请求
   r.POST("/form_post", func(c *gin.Context) {
        message := c.PostForm("message")
        nick := c.DefaultPostForm("nick", "anonymous")

        c.JSON(200, gin.H{
            "status":  "posted",
            "message": message,
            "nick":    nick,
    })
})
   // testing请求
   r.Any("/testing", startPage)
   
    r.Run()
}

请求截图:

  • /login

图片

  • /form_post

图片

  • testing

图片

到这里我们大致了解了Gin的使用,更多个性化,自定义使用请参照Gin实例文档。

? 三个链接

  • Gin官网:https://gin-gonic.com/

  • Gin实例文档:https://gin-gonic.com/zh-cn/docs/examples/

  • Gin中间件仓库:https://github.com/gin-contrib

☀️☀️☀️欢迎大家在公众号后台留言交流学习!!!☀️☀️☀️

12770gin-go轻量级Web框架

root

这个人很懒,什么都没留下

文章评论