package main
import (
"github.com/gin-gonic/gin"
"html/template"
"net/http"
"time"
)
type Address struct {
Mobile string
Email string
}
type News struct {
Title string
Content string
}
func FormatUnixTime(unixtime int64) string {
// 纳nano 纳米nanometer 纳秒nanosecond
unixtimeObj := time.Unix(unixtime, 0) // 秒 纳秒 将int64类型的时间戳转为Time对象
ret := unixtimeObj.Format("2006-01-02 15:04:05")
return ret
}
func main() {
r := gin.Default()
// 8.自定义模板函数
// r.SetFuncMap要在r.LoadHTMLGlob之前
r.SetFuncMap(template.FuncMap{
"FormatUnixTime": FormatUnixTime,
})
// 0.加载templates文件夹下所有子文件夹下的文件
// **是一个通配符,表示匹配任意数量的子目录。* 表示匹配任意字符
r.LoadHTMLGlob("templates/**/*")
// 9.配置静态web目录:配置后可访问静态资源
// relativePath翻译:相对路径
// 第一个参数是网址,第二个是静态资源的根目录(映射目录)
r.Static("/static", "./static")
// 1.map嵌套结构体
// 2.templates下的文件夹下的html如何引入,define-end定义模板名称
// 3.将后台数据赋值给模板中变量
r.GET("/home", func(c *gin.Context) {
c.HTML(200, "default/home.html", gin.H{
"name": "张艺卓",
"password": "123",
"address": &Address{
Mobile: "15239889618",
Email: "2694551335@qq.com",
},
})
})
// 4.模板中if-else-end
/*
eq如果 arg1 == arg2 则返回真
ne如果 arg1!=arg2则返回真
lt如果 arg1< arg2 则返回真
le如果 arg1<= arg2则返回真
gt如果arg1>arg2则返回真
ge如果 arg1 >= arg2 则返回真
*/
r.GET("/admin/home", func(c *gin.Context) {
c.HTML(200, "admin/home.html", map[string]interface{}{
"name": "卓卓",
"password": "123",
"score": 80,
})
})
// 5.模板中循环数据,循环结构体,还有range-else-end。
// ,正常有值循环,当循环体为空时走else
r.GET("/news", func(c *gin.Context) {
c.HTML(http.StatusOK, "default/news.html", gin.H{
"news": []News{
News{
"新闻1",
"内容1",
},
News{
"新闻2",
"内容2",
},
News{
"新闻3",
"内容3",
},
},
"slice": []int{},
})
})
// 6.with-end解构结构体,赋值给.
r.GET("/admin/news", func(c *gin.Context) {
c.HTML(200, "admin/news.html", gin.H{
"news": News{
"标题1",
"新闻1",
},
})
})
// 7.模板函数,自定义模板函数
r.GET("/template_func", func(c *gin.Context) {
var timeObj = time.Now()
var unixtime = timeObj.Unix() // int64
c.HTML(200, "default/template_func.html", gin.H{
"slice": []int{1, 2, 3, 4, 5},
"string": "张艺卓",
"unixtime": unixtime,
// 加载templates文件夹下所有子文件夹下的文件"string": "张艺卓",
})
})
// 8.模板嵌套,静态文件
r.GET("/test", func(c *gin.Context) {
c.HTML(200, "default/test.html", gin.H{})
})
// 更改端口
r.Run(":8081")
}