找回密码
 立即注册
查看: 254|回复: 0

gin框架05

[复制链接]
发表于 2022-7-14 15:36 | 显示全部楼层 |阅读模式
gin渲染

1、各种数据格式的响应


json、结构体、XML、YAML类似于java的properties、ProtoBuf
package mainimport (    "github.com/gin-gonic/gin"    "github.com/gin-gonic/gin/testdata/protoexample")// 多响应方式func main() {    // 1. 创建路由器    r := gin.Default()        // 1.json        r.GET("/someJSON",func(c *gin.Context){            c.JSON(200,gin.H{"message":"someJSON","status":200})        })        // 2.结构体响应        r.GET("someStruct",func(c *gin.Context){            var msg struct{                Name string                Message string                Number int            }            msg.Name = "root"            msg.Message = "message"            msg.Number = 123            c.JSON(200,msg)        })    // 3.XML    r.GET("/someXML",func(c *gin.Context){        c.XML(200,gin.H{"name":"abc"})    })    // 4.YAML响应    r.GET("/someYAML",func(c *gin.Context){        c.YAML(200,gin.H{"name":"zhangsan"})    })    // 5.protobuf格式,谷歌开发的高效存储读取的工具    // 数组?切片? 如果自己构建一个擦混输格式,应该是什么格式?    r.GET("/someProtoBuf",func(c *gin.Context){        reps:=[]int64{int64(1),int64(2)}        // 定义数据        label := "label"        // 传protobuf格式格式数据        data := &protoexample.Test{            Label:&label,            Reps: reps,        }        c.ProtoBuf(200,data)    })    // 3.监听端口,默认8080    r.Run(":8000")}

JSON结果

HTML模板渲染


1、gin支持加载HTML模板,然后根据模板参数进行配置并返回相应的数据,本质上就是字符串替换。
2、LoadHTMLClob()方法可以加载模板文件
package mainimport (    "github.com/gin-gonic/gin")// HTML渲染func main() {    // 1. 创建路由器    r := gin.Default()    // 加载模板文件    r.LoadHTMLGlob("templates/*")    // r.LoadHTML    r.GET("/index", func(c *gin.Context) {        // 根据文件名渲染        // 最终json将title替换        c.HTML(200,"index.tmpl",gin.H{"title":"我的标题"})    })    // 3.监听端口,默认8080    r.Run(":8000")}

模板

重定向

package mainimport (    "github.com/gin-gonic/gin"    "net/http")// HTML渲染func main() {    // 1. 创建路由器    r := gin.Default()    r.GET("/redirect", func(c *gin.Context) {        // 支持内部和外部重定向        c.Redirect(http.StatusMovedPermanently,"http://baidu.com")    })    // 3.监听端口,默认8080    r.Run(":8000")}同步异步


goroutine机制可以方便地实现异步处理
另外,在启动新的goroutine时,不应该使用原始上下文,必须使用它的只读副本
package mainimport (    "fmt"    "github.com/gin-gonic/gin"    "time")// HTML渲染func main() {    // 1. 创建路由器    r := gin.Default()    // 1.同步    r.GET("/long_async", func(c *gin.Context) {        // 需要搞一个副本        copyContext := c.Copy()        // 异步处理        go func() {            time.Sleep(3* time.Second)            fmt.Println("异步执行:"+copyContext.Request.URL.Path)        }()    })    // 2.异步    r.GET("/long_sync", func(c *gin.Context) {        time.Sleep(3* time.Second)        fmt.Println("同步执行:"+c.Request.URL.Path)    })    // 3.监听端口,默认8080    r.Run(":8000")}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2025-5-2 12:16 , Processed in 0.462713 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表