热门IT资讯网

使用golang语言如何封装路由

发表于:2024-11-25 作者:热门IT资讯网编辑
编辑最后更新 2024年11月25日,随着互联网的发展,越来越多的的人进入了IT行业,那么使用golang语言如何封装路由?你们知道吗?为了让大家更加了解golang语言,小编给大家总结了以下内容,一起往下看吧。封装方式一、路由写在 ma

随着互联网的发展,越来越多的的人进入了IT行业,那么使用golang语言如何封装路由?你们知道吗?为了让大家更加了解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语言如何封装路由就分享到这里了,当然并不止以上和大家分析的办法,不过小编可以保证其准确性是绝对没问题的。希望以上内容可以对大家有一定的参考价值,可以学以致用。如果喜欢本篇文章,不妨把它分享出去让更多的人看到。

0