golang封装路由的方法有哪些?
导读:相信很多人对“golang封装路由的方法有哪些?”都不太了解,下面小编为你详细解释一下这个问题,希望对你有一定的帮助 封装方式一、路由写在 main函数中,数据库初始连接放在 init( 函数中...
相信很多人对“golang封装路由的方法有哪些?”都不太了解,下面小编为你详细解释一下这个问题,希望对你有一定的帮助
封装方式一、路由写在 main函数中,数据库初始连接放在 init() 函数中。、
首先看 main.go
一个初始化函数,初始化 db
func init() { db.Connect() }
第二,路由
func main() { // Configure router := gin.Default() // Set html render options htmlRender := GinHTMLRender.New() htmlRender.Debug = gin.IsDebugging() htmlRender.Layout = "layouts/default" // htmlRender.TemplatesDir = "templates/" // default // htmlRender.Ext = ".html" // default // Tell gin to use our html render router.HTMLRender = htmlRender.Create() router.RedirectTrailingSlash = true router.RedirectFixedPath = true // Middlewares router.Use(middlewares.Connect) router.Use(middlewares.ErrorHandler) // Statics router.Static("/public", "./public") // Routes router.GET("/", func(c *gin.Context) { c.Redirect(http.StatusMovedPermanently, "/articles") } ) // Articles router.GET("/new", articles.New) router.GET("/articles/:_id", articles.Edit) router.GET("/articles", articles.List) router.POST("/articles", articles.Create) router.POST("/articles/:_id", articles.Update) router.POST("/delete/articles/:_id", articles.Delete) // Start listening port := Port if len(os.Getenv("PORT")) > 0 { port = os.Getenv("PORT") } router.Run(":" + port) }
封装方式二、路由和 db单独封装到一个函数中,以传参的形式将路由传给另一个函数。
func SetUpServer() { r := gin.Default() // secret 相当于签名 store, _ := sessions.NewRedisStore(10, "tcp", CONFIG.Redis.Host, CONFIG.Redis.Password, []byte(CONFIG.Server.Secret)) r.Use(sessions.Sessions("session", store)) r.Use(gin.Recovery()) r.Use(Uniquify()) r.LoadHTMLGlob("templates/*") r.Static("/static", "public/") SetUpRoutes(r) r.GET("/incr", func(c *gin.Context) { c.JSON(200, gin.H{ "count": c.MustGet("key").(string)} ) } ) // var port string r.Run(":" + CONFIG.Server.Port) }
封装三、将路由等封装到 Server struct 中。对此 Server 创建一个 new函数,路由等相关内容只包含在方法中。
type Server struct { Ws *melody.Melody Routes *gin.Engine Games []*Game } func New() *Server { ws := melody.New() routes := gin.Default() games := make([]*Game, 0) return & Server{ Ws: ws, Routes: routes, Games: games, } } ... ... func (srv *Server) RoutesInit() { srv.Routes.GET("/jq.js", func(c *gin.Context) { http.ServeFile(c.Writer, c.Request, "html/jq.js") } ) srv.Routes.GET("/goyaniv.js", func(c *gin.Context) { http.ServeFile(c.Writer, c.Request, "html/goyaniv.js") } ) srv.Routes.GET("/game/:name", func(c *gin.Context) { cookiekey, _ := c.Request.Cookie("goyanivkey") cookieid, _ := c.Request.Cookie("goyanivid") if cookieid == nil || cookiekey == nil { cookieid := CreateCookie("goyanivkey", GenerateUnique()) cookiekey := CreateCookie("goyanivid", GenerateUnique()) http.SetCookie(c.Writer, cookieid) http.SetCookie(c.Writer, cookiekey) } http.ServeFile(c.Writer, c.Request, "html/game.html") } ) srv.Routes.GET("/gamedev/:name", func(c *gin.Context) { cookiekey, _ := c.Request.Cookie("goyanivkey") cookieid, _ := c.Request.Cookie("goyanivid") if cookieid == nil || cookiekey == nil { cookieid := CreateCookie("goyanivkey", GenerateUnique()) cookiekey := CreateCookie("goyanivid", GenerateUnique()) http.SetCookie(c.Writer, cookieid) http.SetCookie(c.Writer, cookiekey) } http.ServeFile(c.Writer, c.Request, "html/gamedev.html") } ) srv.Routes.GET("/game/:name/ws", func(c *gin.Context) { srv.Ws.HandleRequest(c.Writer, c.Request) } ) srv.Routes.GET("/gamedev/:name/ws", func(c *gin.Context) { srv.Ws.HandleRequest(c.Writer, c.Request) } ) srv.Ws.HandleMessage(func(s *melody.Session, msg []byte) { FireMessage(srv, s, msg) } ) srv.Ws.HandleDisconnect(func(s *melody.Session) { FireDisconnect(srv, s) } ) srv.Ws.HandleConnect(func(s *melody.Session) { FireConnect(srv, s) } ) } func (s *Server) Run() { s.RoutesInit() s.Routes.Run(":5000") }
以上就是关于golang封装路由的方法有哪些?的介绍,本文内容仅供参考,有需要的朋友可以借鉴了解看看,希望对大家学习或工作,想要了解更多欢迎关注网络,小编每天都会为大家更新不同的知识。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: golang封装路由的方法有哪些?
本文地址: https://pptw.com/jishu/653895.html