Golang Gin返回json、HTML (模板继承)、string
Golang Gin返回Json、HTML 、模板继承、模板引入、String代码及解析
package main
import (
"github.com/gin-contrib/multitemplate"
_ "github.com/gin-contrib/multitemplate"
"github.com/gin-gonic/gin"
"log"
"net/http"
)
//创建HTML Render渲染器
func createRender() multitemplate.Renderer {
//创建Render渲染器,赋值给r
//func NewRenderer() Renderer
r := multitemplate.NewRenderer()
//渲染html文件,
//name string:调用模板的名字,注意,以后在使用func (c *Context) HTML(code int, name string, obj interface{})的时候,name string和这里的name string是匹配的。
//files ...string:需要渲染的文件。如果是多文件渲染时,以最后的一个文件为主,前面的文件作为被继承、被包含等使用
//func (Renderer) AddFromFiles(name string, files ...string) *template.Template
r.AddFromFiles("index1", "base/base.html", "html/index.html")
r.AddFromFiles("include", "base/base.html", "html/include.html", "html/include_page.html")
r.AddFromFiles("admin", "html/admin.html")
r.AddFromFiles("users", "base/base.html", "html/users.html")
return r
}
func main() {
//设置log的标记,log.LstdFlags为标准输出,有日期和时间,log.Llongfile为文件的长文件名和行号
log.SetFlags(log.LstdFlags | log.Llongfile)
//定义默认的引擎,该实例已经连接了记录器Logger()和恢复中间件Recovery()。
//engine.Use(Logger(), Recovery())
app := gin.Default()
//加载HTML渲染器
app.HTMLRender = createRender()
//静态目录,浏览时,显示文件目录内容,当访问/static_file时,以目录、文件列表形式显示。
app.StaticFS("/static_file", gin.Dir("static", true))
//静态目录,浏览时,不显示文件目录内容,当访问/static时,目录、文件不显示。
app.Static("/static", "static")
//处理/index的GET方法,
//HTML呈现由其文件名指定的HTTP模板。它还更新了HTTP代码,并将内容类型设置为“文本/html”。
app.GET("/index", func(c *gin.Context) {
//c.HTML():返回是内容类型为"text/html",
//第一个参数:返回的状态码
//第二个参数:渲染的文件的名,这里不是文件名,是文件对应name,在r.AddFromFiles()中定义的name
//第三个参数:传递到模板的参数,不传递,写nil。
//在模板中,通过继承了base.html进行渲染输出,具体看index.html的语法
c.HTML(http.StatusOK, "index1", nil)
})
app.GET("/include", func(c *gin.Context) {
//在模板中,通过继承了base.html进行渲染输出,在渲染过程中,同时渲染了"html/include.html",在"html/include_page.html"通过{{template "include.html"}}进行导入。
c.HTML(http.StatusOK, "include", nil)
})
app.GET("/admin", func(c *gin.Context) {
//在模板渲染中,只渲染了,没有继承base.html,因此不能使用继承。
c.HTML(http.StatusOK, "admin", nil)
})
app.GET("/users", func(c *gin.Context) {
//在模板渲染中,渲染了"base/base.html"和 "html/users.html",因此可以继承base.html,
//在第三个参数中,传递了map,map中,键status,值是200,因此可以在模板中通过使用{{.status}}进行使用
c.HTML(http.StatusOK, "users", gin.H{
"status": 200,
})
})
app.GET("/json", func(c *gin.Context) {
//显示JSON,设置了Content-Type为 "application/json",内容是gin.H定义的mao。
c.JSON(http.StatusOK, gin.H{
"status": 200,
"name": "张无忌",
"age": 18,
"address": "武当",
})
})
app.GET("/string", func(c *gin.Context) {
//返回字符串,第二个参数为显示的内容
c.String(http.StatusOK, "今天是星期一,天气挺好的,周芷若当了峨眉派的掌门")
})
app.GET("/string_format", func(c *gin.Context) {
//返回字符串,第二个参数为内容的格式,第三个及以后的分别是第二个参数的内容替换
c.String(http.StatusOK, "今天是%v,天气挺%v的,%v当了%v的%v", "星期一", "好", "张无忌", "明教", "教主")
})
//运行在127.0.0.1的IP地址上的TCP 80端口
_ = app.Run("127.0.0.1:80")
}