當(dāng)前位置:
首頁(yè) >
gin context和官方context_Go语言gin框架从入门到精通(3)
發(fā)布時(shí)間:2025/3/15
46
豆豆
生活随笔
收集整理的這篇文章主要介紹了
gin context和官方context_Go语言gin框架从入门到精通(3)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
gin的渲染
1 各種數(shù)據(jù)格式的響應(yīng)
- json、結(jié)構(gòu)體、XML、YAML類(lèi)似于java的properties、ProtoBuf
分別對(duì)所有數(shù)據(jù)格式舉個(gè)列子
func main() {r := gin.Default() ?//1. json響應(yīng)r.GET("/someJSON", func(c *gin.Context) {c.JSON(200,gin.H{"message":"someJSON","status":200})})//2. 結(jié)構(gòu)體響應(yīng)r.GET("/someStruct", func(c *gin.Context) {var msg struct{Name stringMessage stringNumber int}msg.Name = "root"msg.Message = "message"msg.Number = 123c.JSON(200,msg)}) ?//3. XMLr.GET("/someXML", func(c *gin.Context) {c.XML(200,gin.H{"message":"abc"})}) ?//4. YAML響應(yīng)r.GET("/someYAML", func(c *gin.Context) {c.YAML(200,gin.H{"name":"you"})}) ?//5.Protobuf格式,谷歌開(kāi)發(fā)的高效存儲(chǔ)讀取的工具r.GET("/someProtoBuf", func(c *gin.Context) {reps := []int64{int64(1), int64(2)}//定義數(shù)據(jù)label := "label"//傳protobuf格式數(shù)據(jù)data := &protoexample.Test{Label: &label,Reps: reps,}c.ProtoBuf(200,data)}) ?r.Run(":8080") }分別在瀏覽器中輸入以下內(nèi)容,會(huì)得到具體的響應(yīng)信息。
http://127.0.0.1:8080/someJSON
http://127.0.0.1:8080/someStruct
http://127.0.0.1:8080/someXML
http://127.0.0.1:8080/someYAML
http://127.0.0.1:8080/someProtoBuf
2 HTML模板渲染
- gin支持加載HTML模板,然后根據(jù)模板參數(shù)進(jìn)行配置并返回響應(yīng)的數(shù)據(jù),本質(zhì)上就是字符串替換
- LoadHTMLGlob()方法可以加載模板文件
舉個(gè)最簡(jiǎn)單的例子:
把index.html放在view目錄下,index.html代碼如下:
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>{{.title}}</title> </head> <body> name : {{.name}} </body> </html>go代碼:
package main ? import ("github.com/gin-gonic/gin""net/http" ) ? func main() {r := gin.Default()r.LoadHTMLGlob("view/*")r.GET("/index", func(c *gin.Context) {c.HTML(http.StatusOK, "index.html", gin.H{"title": "我是gin", "name": "you"})})r.Run() }效果如下:
如果view目錄還有子文件夾,使用 r.LoadHTMLGlob("tem/**/*") 去加載html文件夾,然后使用c.HTML(xxx, "user/index.html",xx),渲染html模板。
- 如果你想進(jìn)行頭尾分離就是下面這種寫(xiě)法了:
文件結(jié)構(gòu):
header.html代碼:
{{define "public/header"}}<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>{{.title}}</title></head><body>{{end}}footer.html代碼:
{{define "public/footer"}}</body></html>{{end}}index.html代碼:
{{ define "user/index.html" }}{{template "public/header" .}}name: {{.name}}{{template "public/footer" .}}{{ end }}go代碼:
func main() {r := gin.Default()r.LoadHTMLGlob("view/**/*")r.GET("/index", func(c *gin.Context) {c.HTML(http.StatusOK, "user/index.html", gin.H{"title": "我是gin", "name": "you1"})})r.Run()}效果演示:
- 如果你需要引入靜態(tài)文件需要定義一個(gè)靜態(tài)文件目錄
3 重定向
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.baidu.com")})r.Run() }4 同步異步
- goroutine機(jī)制可以方便地實(shí)現(xiàn)異步處理
- 另外,在啟動(dòng)新的goroutine時(shí),不應(yīng)該使用原始上下文,必須使用它的只讀副本。
總結(jié)
以上是生活随笔為你收集整理的gin context和官方context_Go语言gin框架从入门到精通(3)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: php7与apache整合,apache
- 下一篇: c语言求树上节点的双亲,用非递归算法求二