Heim  >  Artikel  >  Backend-Entwicklung  >  Golang und Gin Web Framework – Code nach router.Run() ausführen

Golang und Gin Web Framework – Code nach router.Run() ausführen

王林
王林nach vorne
2024-02-11 23:03:08965Durchsuche

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

Der PHP-Editor Banana bietet Ihnen spannende Inhalte zum Golang- und Gin-Web-Framework. Wenn wir Webanwendungen mit Gin schreiben, müssen wir nach router.Run() häufig Code ausführen. Diese Codes können Datenbankverbindungen, Cache-Initialisierung und andere Vorgänge umfassen. In diesem Artikel wird detailliert beschrieben, wie Sie die Methode zum Ausführen von Code nach router.Run() im Gin-Framework implementieren, um Ihnen dabei zu helfen, die Verwendungsfähigkeiten des Gin-Frameworks besser zu beherrschen.

Frageninhalt

Ich bin ziemlich neu, also entschuldigen Sie mich bitte, wenn das etwas Offensichtliches ist.

Ich bin damit beschäftigt, Code für die OAuth 2.0-Authentifizierung zu schreiben. Ein Teil davon bedeutet, dass ich eine Rückruf-URL zur Verfügung haben muss. In meinem Code muss ich einen Callback-Endpunkt erstellen und sobald er betriebsbereit ist, muss ich einen Autorisierungsendpunkt aufrufen, der dann eine Verbindung zu meinem Callback-Endpunkt herstellt.

Mein Problem ist, dass der Aufruf von run() in Gin meine Ausführung blockiert, sodass ich keine weitere Autorisierung durchführen kann, nachdem der Callback-Endpunkt betriebsbereit ist. Gibt es eine Möglichkeit, diesen Code in einer separaten Goroutine auszuführen, damit ich dann den Autorisierungsablauf abschließen kann?

Hier ist ein grobes Beispiel für den Code in meiner Hauptfunktion:

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

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

Lösung

Erstellen Sie einen Listener in der Haupt-Goroutine. Starten Sie den HTTP-Server in Goroutine. Setzen Sie den Authentifizierungsablauf in der Haupt-Goroutine fort.

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

Durch das Erstellen des Listeners in der Haupt-Goroutine wird sichergestellt, dass der Listener bereit ist, vom Authentifizierungsfluss zurückzurufen.

Das obige ist der detaillierte Inhalt vonGolang und Gin Web Framework – Code nach router.Run() ausführen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen