package mainimport ( "fmt" "html/template" "time" "github.com/gin-gonic/gin")//时间戳转换成日期func UnixToTime(timestamp int) string { fmt.Println(timestamp) t := time.Unix(int64(timestamp), 0) return t.Format("2006-01-02 15:04:05")}func initMiddleware(c *gin.Context) { start := time.Now().UnixNano() fmt.Println("1-我是一个中间件") //调用该请求的剩余处理程序 c.Next() fmt.Println("2-我是一个中间件") end := time.Now().UnixNano() fmt.Println(end - start)}func main() { // 创建一个默认的路由引擎 r := gin.Default() //自定义模板函数 注意要把这个函数放在加载模板前 r.SetFuncMap(template.FuncMap{ "UnixToTime": UnixToTime, }) //加载模板 放在配置路由前面 r.LoadHTMLGlob("templates/**/*") //配置静态web目录 第一个参数表示路由, 第二个参数表示映射的目录 r.Static("/static", "./static") r.GET("/", initMiddleware, func(c *gin.Context) { fmt.Println("这是一个首页") // time.Sleep(time.Second) c.String(200, "gin首页") }) r.GET("/news", initMiddleware, func(c *gin.Context) { c.String(200, "新闻页面") }) r.GET("/login", initMiddleware, func(c *gin.Context) { c.String(200, "login") }) r.Run()}
{{ define "admin/index.html" }}<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title></head><body> <h2>这是后台首页</h2></body></html>{{ end }}
{{ define "admin/news.html" }}<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title></head><body> <h2>后台新闻页面</h2></body></html>{{ end }}
<!-- 相当于给模板定义一个名字 define end 成对出现-->{{ define "default/index.html" }}<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <link rel="stylesheet" href="/static/css/base.css"></head><body> <h1>我是一个首页--index</h1> <br> {{.msg}}</body></html>{{ end }}
<!-- 相当于给模板定义一个名字 define end 成对出现-->{{ define "default/user.html" }}<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <link rel="stylesheet" href="static/css/base.css"></head><body> <form action="/doAddUser2" method="post"> 用户名:<input type="text" name="username" /> <br><br> 密码:<input type="password" name="password" /> <br><br> <input type="submit" value="提交"> </form></body></html>{{end}}
<!-- 相当于给模板定义一个名字 define end 成对出现-->{{ define "public/page_footer.html" }} <h1> 我是一个公共的底部 </h1>{{end}}
<!-- 相当于给模板定义一个名字 define end 成对出现-->{{ define "public/page_header.html" }} <h1> 我是一个公共的标题---{{.title}} </h1>{{end}}
package mainimport ( "fmt" "html/template" "time" "github.com/gin-gonic/gin")//时间戳转换成日期func UnixToTime(timestamp int) string { fmt.Println(timestamp) t := time.Unix(int64(timestamp), 0) return t.Format("2006-01-02 15:04:05")}func initMiddlewareOne(c *gin.Context) { fmt.Println("1-我是一个中间件-initMiddlewareOne") //调用该请求的剩余处理程序 c.Next() fmt.Println("2-我是一个中间件-initMiddlewareOne")}func initMiddlewareTwo(c *gin.Context) { fmt.Println("1-我是一个中间件-initMiddlewareTwo") //调用该请求的剩余处理程序 c.Next() fmt.Println("2-我是一个中间件-initMiddlewareTwo")}func main() { // 创建一个默认的路由引擎 r := gin.Default() //自定义模板函数 注意要把这个函数放在加载模板前 r.SetFuncMap(template.FuncMap{ "UnixToTime": UnixToTime, }) //加载模板 放在配置路由前面 r.LoadHTMLGlob("templates/**/*") //配置静态web目录 第一个参数表示路由, 第二个参数表示映射的目录 r.Static("/static", "./static") r.GET("/", initMiddlewareOne, initMiddlewareTwo, func(c *gin.Context) { fmt.Println("这是一个首页") c.String(200, "gin首页") }) r.GET("/news", func(c *gin.Context) { c.String(200, "新闻页面") }) r.GET("/login", func(c *gin.Context) { c.String(200, "login") }) r.Run()}
package mainimport ( "fmt" "html/template" "time" "github.com/gin-gonic/gin")//时间戳转换成日期func UnixToTime(timestamp int) string { fmt.Println(timestamp) t := time.Unix(int64(timestamp), 0) return t.Format("2006-01-02 15:04:05")}func initMiddlewareOne(c *gin.Context) { fmt.Println("1-我是一个中间件-initMiddlewareOne") //调用该请求的剩余处理程序 c.Next() fmt.Println("2-我是一个中间件-initMiddlewareOne")}func initMiddlewareTwo(c *gin.Context) { fmt.Println("1-我是一个中间件-initMiddlewareTwo") //调用该请求的剩余处理程序 c.Next() fmt.Println("2-我是一个中间件-initMiddlewareTwo")}func main() { // 创建一个默认的路由引擎 r := gin.Default() //自定义模板函数 注意要把这个函数放在加载模板前 r.SetFuncMap(template.FuncMap{ "UnixToTime": UnixToTime, }) //加载模板 放在配置路由前面 r.LoadHTMLGlob("templates/**/*") //配置静态web目录 第一个参数表示路由, 第二个参数表示映射的目录 r.Static("/static", "./static") //全局中间件 r.Use(initMiddlewareOne, initMiddlewareTwo) r.GET("/", func(c *gin.Context) { fmt.Println("这是一个首页") c.String(200, "gin首页") }) r.GET("/news", func(c *gin.Context) { c.String(200, "新闻页面") }) r.GET("/login", func(c *gin.Context) { c.String(200, "login") }) r.Run()}
package mainimport ( "fmt" "gindemo08/routers" "html/template" "time" "github.com/gin-gonic/gin")//时间戳转换成日期func UnixToTime(timestamp int) string { fmt.Println(timestamp) t := time.Unix(int64(timestamp), 0) return t.Format("2006-01-02 15:04:05")}func main() { // 创建一个默认的路由引擎 r := gin.Default() //自定义模板函数 注意要把这个函数放在加载模板前 r.SetFuncMap(template.FuncMap{ "UnixToTime": UnixToTime, }) //加载模板 放在配置路由前面 r.LoadHTMLGlob("templates/**/*") //配置静态web目录 第一个参数表示路由, 第二个参数表示映射的目录 r.Static("/static", "./static") routers.AdminRoutersInit(r) routers.ApiRoutersInit(r) routers.DefaultRoutersInit(r) r.Run()}
package adminimport ( "net/http" "github.com/gin-gonic/gin")type ArticleController struct { BaseController}func (con ArticleController) Index(c *gin.Context) { // c.String(http.StatusOK, "文章列表--") con.success(c)}func (con ArticleController) Add(c *gin.Context) { c.String(http.StatusOK, "-add--文章-")}func (con ArticleController) Edit(c *gin.Context) { c.String(http.StatusOK, "-Edit---文章---")}
package adminimport "github.com/gin-gonic/gin"type BaseController struct{}func (con BaseController) success(c *gin.Context) { c.String(200, "成功")}func (con BaseController) error(c *gin.Context) { c.String(200, "失败")}
package adminimport ( "fmt" "github.com/gin-gonic/gin")type IndexController struct {}func (con IndexController) Index(c *gin.Context) { username, _ := c.Get("username") fmt.Println(username) //类型断言 v, ok := username.(string) if ok { c.String(200, "用户列表--"+v) } else { c.String(200, "用户列表--获取用户失败") }}
package adminimport "github.com/gin-gonic/gin"type UserController struct { BaseController}func (con UserController) Index(c *gin.Context) { // c.String(200, "用户列表--") con.success(c)}func (con UserController) Add(c *gin.Context) { c.String(200, "用户列表-add---")}func (con UserController) Edit(c *gin.Context) { c.String(200, "用户列表-Edit------")}
package apiimport "github.com/gin-gonic/gin"type ApiController struct{}func (con ApiController) Index(c *gin.Context) { c.String(200, "我是一个api接口")}func (con ApiController) Userlist(c *gin.Context) { c.String(200, "我是一个api接口-Userlist")}func (con ApiController) Plist(c *gin.Context) { c.String(200, "我是一个api接口-Plist")}
package ityingimport ( "net/http" "github.com/gin-gonic/gin")type DefaultController struct{}func (con DefaultController) Index(c *gin.Context) { c.HTML(http.StatusOK, "default/index.html", gin.H{ "msg": "我是一个msg", })}func (con DefaultController) News(c *gin.Context) { c.String(200, "News")}
package middlewaresimport ( "fmt" "time" "github.com/gin-gonic/gin")func InitMiddleware(c *gin.Context) { //判断用户是否登录 fmt.Println(time.Now()) fmt.Println(c.Request.URL) c.Set("username", "张三") //定义一个goroutine统计日志 当在中间件或 handler 中启动新的 goroutine 时,不能使用原始的上下文(c *gin.Context), 必须使用其只读副本(c.Copy()) cCp := c.Copy() go func() { time.Sleep(2 * time.Second) fmt.Println("Done! in path " + cCp.Request.URL.Path) }()}
package routersimport ( "gindemo08/controllers/admin" "gindemo08/middlewares" "github.com/gin-gonic/gin")func AdminRoutersInit(r *gin.Engine) { //middlewares.InitMiddleware中间件 adminRouters := r.Group("/admin", middlewares.InitMiddleware) { adminRouters.GET("/", admin.IndexController{}.Index) adminRouters.GET("/user", admin.UserController{}.Index) adminRouters.GET("/user/add", admin.UserController{}.Add) adminRouters.GET("/user/edit", admin.UserController{}.Edit) adminRouters.GET("/article", admin.ArticleController{}.Index) adminRouters.GET("/article/add", admin.ArticleController{}.Add) adminRouters.GET("/article/edit", admin.ArticleController{}.Edit) }}
package routersimport ( "gindemo08/controllers/api" "github.com/gin-gonic/gin")func ApiRoutersInit(r *gin.Engine) { apiRouters := r.Group("/api") { apiRouters.GET("/", api.ApiController{}.Index) apiRouters.GET("/userlist", api.ApiController{}.Userlist) apiRouters.GET("/plist", api.ApiController{}.Plist) }}
package routersimport ( "gindemo08/controllers/itying" "github.com/gin-gonic/gin")func DefaultRoutersInit(r *gin.Engine) { defaultRouters := r.Group("/") { defaultRouters.GET("/", itying.DefaultController{}.Index) defaultRouters.GET("/news", itying.DefaultController{}.News) }}
{{ define "admin/index.html" }}<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title></head><body> <h2>这是后台首页</h2></body></html>{{ end }}
{{ define "admin/news.html" }}<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title></head><body> <h2>后台新闻页面</h2></body></html>{{ end }}
<!-- 相当于给模板定义一个名字 define end 成对出现-->{{ define "default/index.html" }}<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <link rel="stylesheet" href="/static/css/base.css"></head><body> <h1>我是一个首页--index</h1> <br> {{.msg}}</body></html>{{ end }}
源码.7z