首頁 >後端開發 >Golang >Golang 和 Gin Web 框架 - 在 router.Run() 之後執行程式碼

Golang 和 Gin Web 框架 - 在 router.Run() 之後執行程式碼

王林
王林轉載
2024-02-11 23:03:081025瀏覽

Golang 和 Gin Web 框架 - 在 router.Run() 之后执行代码

php小編香蕉為您帶來關於Golang和Gin Web框架的精彩內容。在使用Gin編寫Web應用程式時,我們經常需要在router.Run()之後執行一些程式碼。這些程式碼可能包括資料庫連線、快取初始化等操作。本文將詳細介紹如何在Gin框架中實作在router.Run()之後執行程式碼的方法,幫助您更能掌握Gin框架的使用技巧。

問題內容

我對 go 還很陌生,所以如果這是顯而易見的事情,請原諒。

我正忙著在 go 中寫一些用於 oauth 2.0 身份驗證的程式碼。這部分意味著我需要有一個可用的回調 url。在我的程式碼中,我需要建立一個回調端點,一旦啟動並運行,我需要呼叫一個授權端點,然後該端點將連接到我的回調端點。

我的問題是,在 gin 中呼叫 run() 會阻止我的執行,因此在回呼端點啟動並運行後我無法進行任何進一步的授權。有沒有辦法在單獨的 goroutine 中運行此程式碼,以便我可以隨後完成授權流程?

這是我的主函數中的程式碼的粗略範例:

r := gin.Default()
//ReqHandler is an HtttpHandler func
r.GET("/redirect", ReqHandler)

r.Run(":5001")
ContinueAuth()

解決方法

在主 goroutine 中建立一個監聽器。在 goroutine 中啟動 http 伺服器。繼續主 goroutine 中的身份驗證流程。

r := gin.Default()
r.GET("/redirect", ReqHandler)

l, err := net.Listen("tcp", ":5001")
if err != nil {
    log.Fatal(err)
}

go func() {
   log.Fatal(r.RunListener(l))
}()

ContinueAuth()

select {} // wait forever

在主 goroutine 中建立偵聽器可確保偵聽器已準備好從身分驗證流程中進行回呼。

以上是Golang 和 Gin Web 框架 - 在 router.Run() 之後執行程式碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除