main.go
package main
import (
"ginshop02/models"
"ginshop02/routers"
"html/template"
"github.com/gin-contrib/sessions"
"github.com/gin-contrib/sessions/cookie"
"github.com/gin-gonic/gin"
)
func main() {
// 创建一个默认的路由引擎
r := gin.Default()
//自定义模板函数 注意要把这个函数放在加载模板前
r.SetFuncMap(template.FuncMap{
"UnixToTime": models.UnixToTime,
})
//加载模板 放在配置路由前面
r.LoadHTMLGlob("templates/**/**/*")
//配置静态web目录 第一个参数表示路由, 第二个参数表示映射的目录
r.Static("/static", "./static")
// 创建基于 cookie 的存储引擎,secret11111 参数是用于加密的密钥
store := cookie.NewStore([]byte("secret111"))
//配置session的中间件 store是前面创建的存储引擎,我们可以替换成其他存储引擎
r.Use(sessions.Sessions("mysession", store))
routers.AdminRoutersInit(r)
routers.ApiRoutersInit(r)
routers.DefaultRoutersInit(r)
r.Run()
}
routers->adminRouters.go后台路由
package routers
import (
"ginshop02/controllers/admin"
"ginshop02/middlewares"
"github.com/gin-gonic/gin"
)
func AdminRoutersInit(r *gin.Engine) {
//middlewares.InitMiddleware中间件
adminRouters := r.Group("/admin", middlewares.InitMiddleware)
{
adminRouters.GET("/", admin.MainController{}.Index)
adminRouters.GET("/welcome", admin.MainController{}.Welcome)
adminRouters.GET("/login", admin.LoginController{}.Index)
adminRouters.POST("/doLogin", admin.LoginController{}.DoLogin)
adminRouters.GET("/manager", admin.ManagerController{}.Index)
adminRouters.GET("/manager/add", admin.ManagerController{}.Add)
adminRouters.GET("/manager/edit", admin.ManagerController{}.Edit)
adminRoters.GET("/manager/delete", admin.ManagerController{}.Delete)
adminRouters.GET("/focus", admin.FocusController{}.Index)
adminRouters.GET("/focus/add", admin.FocusController{}.Add)
adminRouters.GET("/focus/edit", admin.FocusController{}.Edit)
adminRouters.GET("/focus/delete", admin.FocusController{}.Delete)
}
}
routers->apiRouters.go 微信小程序等路由
package routers
import (
"ginshop02/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)
}
}
routers->defaultRouters.go 前端路由
package routers
import (
"ginshop02/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)
}
}
controllers->admin->login.go
package admin
import (
"net/http"
"github.com/gin-gonic/gin"
)
type LoginController struct {
BaseController
}
func (con LoginController) Index(c *gin.Context) {
c.HTML(http.StatusOK, "admin/login/login.html", gin.H{})
}
func (con LoginController) DoLogin(c *gin.Context) {
c.String(http.StatusOK, "-add--文章-")
}
controllers->admin->focus.go
package admin
import (
"net/http"
"github.com/gin-gonic/gin"
)
type FocusController struct{}
func (con FocusController) Index(c *gin.Context) {
c.HTML(http.StatusOK, "admin/focus/index.html", gin.H{})
}
func (con FocusController) Add(c *gin.Context) {
c.HTML(http.StatusOK, "admin/focus/add.html", gin.H{})
}
func (con FocusController) Edit(c *gin.Context) {
c.HTML(http.StatusOK, "admin/focus/edit.html", gin.H{})
}
func (con FocusController) Delete(c *gin.Context) {
c.String(http.StatusOK, "-add--文章-")
}
controllers->admin->manager.go
package admin
import (
"net/http"
"github.com/gin-gonic/gin"
)
type ManagerController struct {
BaseController
}
func (con ManagerController) Index(c *gin.Context) {
c.HTML(http.StatusOK, "admin/manager/index.html", gin.H{})
}
func (con ManagerController) Add(c *gin.Context) {
c.HTML(http.StatusOK, "admin/manager/add.html", gin.H{})
}
func (con ManagerController) Edit(c *gin.Context) {
c.HTML(http.StatusOK, "admin/manager/edit.html", gin.H{})
}
func (con ManagerController) Delete(c *gin.Context) {
c.String(http.StatusOK, "-add--文章-")
}
controllers->admin->main.go
package admin
import (
"net/http"
"github.com/gin-gonic/gin"
)
type MainController struct{}
func (con MainController) Index(c *gin.Context) {
c.HTML(http.StatusOK, "admin/main/index.html", gin.H{})
}
func (con MainController) Welcome(c *gin.Context) {
c.HTML(http.StatusOK, "admin/main/welcome.html", gin.H{})
}
controllers->admin->base.go
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, "失败")
}
middlewares->init.go 中间件
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)
}()
}
浙公网安备 33010602011771号