站长资讯网
最全最丰富的资讯网站

golang如何封装路由

golang如何封装路由

封装方式一、路由写在 main函数中,数据库初始连接放在 init() 函数中。、

golang如何封装路由

首先看 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单独封装到一个函数中,以传参的形式将路由传给另一个函数。

golang如何封装路由

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函数,路由等相关内容只包含在方法中。

golang如何封装路由

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") }

赞(0)
分享到: 更多 (0)
网站地图   沪ICP备18035694号-2    沪公网安备31011702889846号