首页后端开发其他后端知识golang封装路由的方法有哪些?

golang封装路由的方法有哪些?

时间2024-03-27 01:40:03发布访客分类其他后端知识浏览740
导读:相信很多人对“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

若转载请注明出处: golang封装路由的方法有哪些?
本文地址: https://pptw.com/jishu/653895.html
用golang连接mysql的方法是什么? 详解vue中computed表示和用法

游客 回复需填写必要信息