隨著互聯(lián)網(wǎng)的發(fā)展,越來越多的的人進入了IT行業(yè),那么使用golang語言如何封裝路由?你們知道嗎?為了讓大家更加了解golang語言,小編給大家總結了以下內容,一起往下看吧。


封裝方式一、路由寫在 main函數(shù)中,數(shù)據(jù)庫初始連接放在 init() 函數(shù)中。、

首先看 main.go
一個初始化函數(shù),初始化 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單獨封裝到一個函數(shù)中,以傳參的形式將路由傳給另一個函數(shù)。

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 創(chuàng)建一個 new函數(shù),路由等相關內容只包含在方法中。

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語言如何封裝路由就分享到這里了,當然并不止以上和大家分析的辦法,不過小編可以保證其準確性是絕對沒問題的。希望以上內容可以對大家有一定的參考價值,可以學以致用。如果喜歡本篇文章,不妨把它分享出去讓更多的人看到。
網(wǎng)站名稱:使用golang語言如何封裝路由-創(chuàng)新互聯(lián)
網(wǎng)頁路徑:http://chinadenli.net/article38/pehpp.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、定制網(wǎng)站、做網(wǎng)站、ChatGPT、網(wǎng)站維護、用戶體驗
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內容