golang如何封装路由
Go  /  管理员 发布于 7年前   196
封装方式一、路由写在 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 stringr.Run(":" + CONFIG.Server.Port)}
封装三、将路由等封装到 Server struct 中。对此 Server 创建一个 new函数,路由等相关内容只包含在方法中。
type Server struct {Ws *melody.MelodyRoutes *gin.EngineGames []*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知识请关注golang教程栏目。
以上就是golang如何封装路由的详细内容,更多请关注其它相关文章!
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号