七叶笔记 » golang编程 » Golang从入门到精通,Gin多种形式的返回值

Golang从入门到精通,Gin多种形式的返回值

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

相关文章