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

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

王林
Freigeben: 2024-02-11 23:03:08
nach vorne
1024 Leute haben es durchsucht

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()
Nach dem Login kopieren

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
Nach dem Login kopieren

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!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage