golang mysql封裝_golang如何封裝路由

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教程欄目。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/530880.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/530880.shtml
英文地址,請注明出處:http://en.pswp.cn/news/530880.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

在java繼承機制中 父類中的私有_Java中子類能繼承父類的私有屬性嗎?

前段時間去聽老師講課的時候,老師告訴我子類是可以繼承父類所有的屬性和方法的。當時我是極其疑惑的,因為之前學校考試時這個考點我記得很清楚:子類只能繼承父類的非私有屬性和方法。老師給我的解釋是這樣的——先看下面一段代碼/*** 定義父類…

堆棧關系java_從關鍵字說Java對象、引用、指針、堆棧的關系

前言:上一篇中我們介紹了new關鍵字 點擊打開鏈接,new一個類,實際上就是調用該類的構造函數,返回該類的對象。如a new Animal();返回的對象賦給變量a。我們來分析一下內存分配的步驟,new一個類,實際上就創造…

java socket編程客戶端_Java Socket編程 - 基于Socket實現HTTP下載客戶端

沒有借助任何第三方庫,完全基于JAVA Socket實現一個最小化的HTTP文件下載客戶端。完整的演示如何通過Socket實現下載文件的HTTP請求(request header)發送如何從Socket中接受HTTP響應(Response header, Response body)報文并解析與保存文件內容。如何通過SwingWork實…

java讀c二進制文件_如何使用JAVA讀取C / Matlab創建的二進制文件

小編典典正如我所猜測的那樣,這是一個字節序問題,即您的二進制文件被寫為低字節序的整數(可能是因為您使用的是Intel或類似的CPU)。但是,無論Java代碼運行在哪個CPU上,它都在讀取大端整數。為了顯示該問題,以下代碼將讀…

java 通聯支付接口_allinpay 通聯支付接口實例

【實例簡介】allinpay 支付的實例代碼,這只是部分,需要其它的請聯系我。 幫忙找【實例截圖】【核心代碼】201708081652114811└── unionorder_demo├── java│ └── uniondemo│ ├── WebContent│ │ ├── META-INF│ │ │ └…

java web tcp長連接超時時間_常用java web容器http長連接超時設置

1.http長連接相關知識http長連接對我們來說并不陌生,但長連接并不是永遠不會關閉。對于HTTP長連接需要注意下面幾點:keepalive_timeout指的是web服務器發送完最后一個響應報文后,開始計時,如果在keepalive_timeout指定的時間內還沒…

java相遇問題_行程問題

行程問題 《行程問題》說課設計——現代教育信息技術與數學學科的整合福建省閩侯縣尚干中心小學 林惠貞 郵編:350112 郵箱:zhenzi2277163.com眾所周知,未來的教育,倡導開放式學習,把學習的地點擴展到社會、網絡&…

jbutton 數組創建 java_java-將JButton數組添加到JPanel(按鈕不可見)

我正在嘗試使用Java創建一個簡單的計算器.為此,我創建了一個JButton數組并將其添加到JPanel中.問題:按鈕不可見.我還添加了一個JLabel和一個JButton進行測試,它們可以正確顯示.編碼:package test;import java.awt.BorderLayout;import javax.swing.*;pub…

jwt java 項目實例_JWT(JsonWebToken)+SpringMVC項目demo

【實例簡介】JSON Web Token(JWT)是一個非常輕巧的規范。現在免費給大家分享一個JWT(JsonWebToken)SpringMVC項目的demo!【實例截圖】【核心代碼】jwt-demo└── jwt-demo├── pom.xml├── src│ └── main│ ├── java│ │ └── com│ │ └── hthl…

java寫一個99到0_Java中一個普通的循環為何從10開始到99連續相乘會得到0?

【套裝4本】java編程思想4第4版402.5元包郵(需用券)去購買 >這是一塊非常簡單的Java代碼片段&#xff1a;public class HelloWorld{public static void main(String []args){int product 1;for (int i 10; i < 99; i) {product * i;}System.out.println(product);}}為什…

neo4j java查找_Spring-Boot使用neo4j-java-driver-- 查找兩個節點之間關系的最短路徑

一、Cypher數據create (小北:朋友圈{姓名:"小北", 喜歡的書類:"Poetry"}),(小菲:朋友圈{姓名:"小菲", 喜歡的書類:"Science Fiction"}),(小鵬:朋友圈{姓名:"小鵬", 喜歡的書類:"Music"}),(小穎:朋友圈{姓名:"…

java 返回兩個集合_使用 java stream 獲取兩個集合之間的交集.差集

原始對象List hrProbationMainList new ArrayList();List hrProbationMains probationMainDao.findAll();獲取交集對象stream 轉換成流 (只有變成流才能操作)filter 封裝判斷條件(如果true 則收集到結果中,false則不收集)collect 收集結果返回到指定類型中//交集對象ListhrPro…

java重寫重定向_JavaWeb請求轉發與請求重定向理解

請求轉發使用方法httpServletRequest.getRequestDispatcher("login.jsp").forward(httpServletRequest, servletresponse);此請求過程 完全是一次request對象 完成的。我們可以用 filter 截取用戶的這次請求&#xff0c;然后利用這次請求 訪問其它頁面&#xff0c;當…

autojs調用java識字_autojs實現抽象類的繼承

作者: 牙叔使用情景在java中, 抽象類必須繼承才能使用, 那么在autojs中怎樣實現繼承抽象類呢?java中的實現創建一個抽象類package com.yashu;public abstract class Employee{ private String name; private String address; private int number; public abstract double com…

java wix_使用WIX升級MSI

我正在使用WIX創建一個MSI安裝程序 . 一切都很好&#xff0c;我能夠創建自己的產品并創造一切 .但是&#xff0c;當我想要創建升級時&#xff0c;它無法正常工作 .我使用了以下代碼&#xff0c;其中$(var.ProductUpgradeCode)被定義并用作product元素中的upgrade-code .Minimum…

繼承易錯總結

1.繼承會將所有的成員繼承下來&#xff0c;但是繼承方式限定的是繼承下來成員的可見類型(如果是private繼承&#xff0c;那么他不論哪里都是不可見的&#xff1b;如果是protected繼承在類中是可見的&#xff0c;在類外是不可見的&#xff1b;如果是public繼承&#xff0c;在任何…

flat在java中的含義_Java 9中Collectors.flatMapping()方法的重要性?

在Java 9中&#xff0c;向Collectors類添加了一個新方法&#xff1a;flatMapping()。它類似于Collectors.mapping()方法&#xff0c;其中flatMapping()方法允許我們處理嵌套的集合。 Collectors.flatMapping()方法需要的功能將被施加到輸入元件和集電極積累通過功能傳遞的元件。…

hhkb適合寫java嗎_起底這屆HHKB最強新品鍵盤,究竟好在哪兒?

2019年12月HHKB上市了3大品類的12款新品鍵盤&#xff0c;今天為大家分享外設天下為HHKB Professional HYBIRD Type-S 雙模靜音旗艦版靜電容鍵盤做的評測&#xff0c;起底這屆HHKB新品的最強新品。近日&#xff0c;HHKB更新了旗下的在售產品系列&#xff0c;為了滿足嚴肅、安靜辦…

java暫停5s_java如何實現繼續/暫停按鈕

匿名用戶1級2016-11-24 回答很簡單&#xff0c;我給你寫一個Demo&#xff1a;import java.awt.event.*;import javax.swing.*;public class Demo extends Thread {private JFrame frm new JFrame("Demo");private JButton btnPause new JButton("Pause")…

c mysql數據庫_C實現MySQL數據庫操作

C實現MySQL數據庫操作兩個月前&#xff0c;也就是9月份&#xff0c;心血來潮在windows下實現了用C連接數據庫&#xff0c;當時很是有把linux下一并給實現了。但是沒有想得那么簡單。這個任務一直推遲到了現在才完成&#xff0c;究其原因&#xff1a;1.我直接用eclipse開發工具&…