package main
import (
"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 main
import (
"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 main
import (
"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 main
import (
"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 admin
import (
"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 admin
import "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 admin
import (
"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 admin
import "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 api
import "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 itying
import (
"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 middlewares
import (
"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 routers
import (
"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 routers
import (
"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 routers
import (
"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