✨ 介绍
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
。
☀️☀️☀️欢迎大家在公众号后台留言交流学习!!!☀️☀️☀️
文章评论