|
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")} |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|