您好,欢迎访问一九零五行业门户网

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知识请关注golang教程栏目。
以上就是golang如何封装路由的详细内容。
其它类似信息

推荐信息