golang mysql封装_golang如何封装路由

本文介绍了三种在Golang中封装MySQL连接和设计路由的方法:一是将数据库初始化放入`init()`函数,路由配置在`main()`中;二是将路由和数据库封装到单独的函数,通过参数传递;三是创建`Server`结构体,将路由相关方法置于其中。通过这些封装方式,可以更好地组织和管理Golang应用的结构。
摘要由CSDN通过智能技术生成

e3acab1d3cdb2adae340cce0d960e3fb.png

封装方式一、路由写在 main函数中,数据库初始连接放在 init() 函数中。、

3aae16527c168a9737abda02cf53147a.png

首先看 main.go

一个初始化函数,初始化 dbfunc 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单独封装到一个函数中,以传参的形式将路由传给另一个函数。

d6205002a0661659971b583532e09723.pngfunc 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函数,路由等相关内容只包含在方法中。

1db91fac17fbd5acd1816a9486f326dc.pngtype 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知识请关注PHP中文网golang教程栏目。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值