1. 前言
gin框架是Go语言开发的 Web 框架,Web渲染这种功能它还是有的
业务实现逻辑在routers/render.go
2. 各种数据格式相应
2.1. json响应
package routers
import (
"github.com/gin-gonic/gin"
)
// 渲染常用
func RenderRouter(e *gin.Engine) {
// 使用路由组
r := e.Group("/render")
r.GET("/someJSON", func(c *gin.Context) {
c.JSON(200, gin.H{"message": "someJSON", "status": 200})
})
}
http://127.0.0.1:8080/render/someJSON
2.2. 结构体响应
package routers
import (
"github.com/gin-gonic/gin"
)
// 渲染常用
func RenderRouter(e *gin.Engine) {
// 使用路由组
r := e.Group("/render")
r.GET("/someStruct", someStruct)
}
// 结构体响应
func someStruct(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)
}
http://127.0.0.1:8080/render/someStruct
2.3. xml响应
package routers
import (
"github.com/gin-gonic/gin"
)
// 渲染常用
func RenderRouter(e *gin.Engine) {
// 使用路由组
r := e.Group("/render")
r.GET("/someXML", func(c *gin.Context) {
c.XML(200, gin.H{"message": "abc"})
})
}
2.4. YAML响应
package routers
import (
"github.com/gin-gonic/gin"
)
// 渲染常用
func RenderRouter(e *gin.Engine) {
// 使用路由组
r := e.Group("/render")
r.GET("/someYAML", func(c *gin.Context) {
c.YAML(200, gin.H{"name": "zhangsan"})
})
}
3. HTML渲染
3.1. html文件渲染
package routers
import (
"github.com/gin-gonic/gin"
"net/http"
)
// 渲染常用
func RenderRouter(e *gin.Engine) {
// 使用路由组
r := e.Group("/render")
// 加载模板文件
e.LoadHTMLGlob("html/**/*")
// 引入静态文件
// r.Static("/assets", "./assets")
r.GET("/index", func(c *gin.Context) {
c.HTML(http.StatusOK, "render/index.html", gin.H{"title": "这个锅我不背", "address": "http://yzx-fjl.cn"})
})
}
http://127.0.0.1:8080/render/index
- 前端代码html/render/index.html
3.2. html文件拆分渲染
package routers
import (
"github.com/gin-gonic/gin"
"net/http"
)
// 渲染常用
func RenderRouter(e *gin.Engine) {
// 使用路由组
r := e.Group("/render")
// 加载模板文件
e.LoadHTMLGlob("html/**/*")
// 引入静态文件
// r.Static("/assets", "./assets")
r.GET("/view", func(c *gin.Context) {
c.HTML(http.StatusOK, "render/view.html", gin.H{"title": "这个锅我不背", "address": "http://yzx-fjl.cn"})
})
}
http://127.0.0.1:8080/render/view
前端代码html/render/view.html
前端代码html/render/header.html
前端代码html/render/footer.html
4. 重定向
package routers
import (
"github.com/gin-gonic/gin"
)
// 渲染常用
func RenderRouter(e *gin.Engine) {
// 使用路由组
r := e.Group("/render")
r.GET("/redirect", func(c *gin.Context) {
c.Redirect(http.StatusMovedPermanently, "http://yzx-fjl.cn")
})
}
http://127.0.0.1:8080/render/redirect
5. 异步
package routers
import (
"github.com/gin-gonic/gin"
"log"
"time"
)
// 渲染常用
func RenderRouter(e *gin.Engine) {
// 使用路由组
r := e.Group("/render")
r.GET("/async", longAsync)
}
// 异步 curl http://localhost:8080/render/async
func longAsync(c *gin.Context) {
// 需要搞一个副本
copyContext := c.Copy()
// 异步处理
go func() {
time.Sleep(3 * time.Second)
log.Println("异步执行:" + copyContext.Request.URL.Path)
}()
}
http://localhost:8080/render/async
在命令行里看效果
6. 同步
package routers
import (
"github.com/gin-gonic/gin"
"log"
"time"
)
// 渲染常用
func RenderRouter(e *gin.Engine) {
// 使用路由组
r := e.Group("/render")
r.GET("/sync", longSync)
}
// 同步 curl http://localhost:8080/render/sync
func longSync(c *gin.Context) {
time.Sleep(3 * time.Second)
log.Println("同步执行:" + c.Request.URL.Path)
}