3-Gin的請求與響應
阿新 • • 發佈:2022-04-09
一 請求
Gin的請求物件被封裝在gin.Context這個結構體指標中
1.1 c.Request結構體
fmt.Println(c.Request.Method) // 請求方式 fmt.Println(c.Request.Header) // 請求頭 fmt.Println(c.Request.RemoteAddr) // 客戶端地址和埠 fmt.Println(c.Request.Host) // 服務端地址和埠 fmt.Println(c.Request.Cookies()) // cookie fmt.Println(c.Request.UserAgent()) // 客戶端型別 fmt.Println(c.FullPath()) // 請求路徑,不帶?後的資料 fmt.Println(c.Request.Body) // 請求體,body體 body,_ := ioutil.ReadAll(c.Request.Body) fmt.Println("---body--"+string(body))
二 響應
2.1 返回字串c.String
r.GET("/test", func(c *gin.Context) {
c.String(200,"成功")
})
2.2 返回json格式
r.GET("/json", func(c *gin.Context) { // 1 方式一,直接返回map格式 var m = map[string]interface{}{ "name": "lqz", "age": 19, } c.JSON(200, m) // 2 方式二,藉助gin.H, gin.H 是 map[string]interface{}的縮寫 c.JSON(200, gin.H{"name": "lqz", "age": 19}) // 3 方式三:直接返回結構體,注意大寫,匯出欄位 c.JSON(200, struct { Name string `json:"user"` Age int }{"lqz", 19}) })
2.3 返回json陣列
package main import ( "github.com/gin-gonic/gin" ) func main() { router := gin.Default() router.GET("/json", func(c *gin.Context) { type Person struct { Name string `json:"name"` Age int `json:"age"` } var personList = []Person{{"lqz", 19}, {"彭于晏", 22}, {"林俊杰", 39}} c.IndentedJSON(200, personList) }) router.Run(":8000") }
2.4 返回xml格式
func main() {
r := gin.Default()
r.GET("/xml", func(c *gin.Context) {
// 1 方式一:使用gin.H
c.XML(200,gin.H{"name":"lqz","age":19})
// 2 方式二:使用結構體
type Person struct {
Name string `xml:"user"`
Age int
}
var lqz Person=Person{"lqz",19}
c.XML(200,lqz)
})
r.Run(":8000")
}
2.5 返回YAML格式
router.GET("/yaml", func(c *gin.Context) {
c.YAML(200, gin.H{"name": "lqz", "age": 19})
})
2.6 返回ProtoBuf格式
// protobuf格式,谷歌開發的高效儲存讀取的工具
router.GET("/someProtoBuf", func(c *gin.Context) {
reps := []int64{1, 11, 111}
t:=int32(999)
// 定義資料
label := "lqz_label"
// protobuf 的具體定義寫在 testdata/protoexample 檔案中。
data := &protoexample.Test{
Label: &label,
Type: &t,
Reps: reps,
}
// 請注意,資料在響應中變為二進位制資料
// 將輸出被 protoexample.Test protobuf 序列化了的資料
c.ProtoBuf(200, data)
})
2.7 渲染模板
//1 在專案路徑下新建 templates資料夾,下新建index.tml或者index.html
func main() {
r := gin.Default()
// 要指定模板檔案的路徑
r.LoadHTMLGlob("templates/*")
// r.LoadHTMLFiles("./index.html") load單個頁面
r.GET("/index", func(c *gin.Context) {
c.HTML(http.StatusOK,"index.html",gin.H{
"name":"lqz",
"age":19,
})
})
r.Run(":8000")
}
2.8 重定向
package main
import (
"net/http"
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
r.GET("/index", func(c *gin.Context) {
c.Redirect(http.StatusMovedPermanently, "http://www.liuqingzheng.top")
})
r.Run()
}
三使用 jsoniter編譯
jsoniter:https://github.com/json-iterator/go
Gin 使用 encoding/json
作為預設的 json 包,但是你可以在編譯中使用標籤將其修改為 jsoniter。
$ go build -tags=jsoniter .