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)
}

http://localhost:8080/render/sync
在命令行里看效果

Copyright © yzx该文章修订时间: 2021-09-18 10:33:47

results matching ""

    No results matching ""