Gin框架中router.Run()阻塞后如何继续OAuth2授权流程?
解决方案:用Goroutine启动Gin服务避免阻塞
当然可以用goroutine解决这个问题,把r.Run()放到goroutine里执行,主goroutine就能继续往下跑ContinueAuth()了。
修改后的代码示例:
package main import ( "log" "time" "github.com/gin-gonic/gin" ) func main() { r := gin.Default() r.GET("/redirect", ReqHandler) // 把Gin服务启动逻辑放到goroutine中 go func() { if err := r.Run(":5001"); err != nil { log.Fatalf("Gin服务启动失败: %v", err) } }() // 加短暂休眠确保服务完全启动后再执行授权流程 // 若对启动时机要求高,可改用监听端口就绪、sync.WaitGroup等更严谨的方式 time.Sleep(100 * time.Millisecond) ContinueAuth() }
关键点说明:
r.Run()是阻塞调用,会一直占用当前goroutine直到服务停止,放到goroutine里就不会阻塞主流程。- 加
time.Sleep是为了避免服务还没完全启动就发起授权请求,导致回调端点无法响应。 - goroutine里的
log.Fatalf会在服务启动失败时终止程序,这很合理——服务启动不了的话,后续OAuth流程也无法进行。
内容的提问来源于stack exchange,提问作者LiamBaisley
相关产品推荐
相关产品推荐

