You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 11:04:56