首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >等待gin HTTP服务器启动

问等待gin HTTP服务器启动
EN

Stack Overflow用户
提问于 2019-03-10 22:41:41
回答 1查看 1.1K关注 0票数 0

我们正在使用gin在生产中公开一些REST API。现在,一旦HTTP服务器启动,我必须做一些事情。

我对频道不是很熟悉,但下面的代码就是我想要做的。一旦startHTPPRouter()启动了HTTP服务,我就想向main()发送一个信号。基于这个信号,我想做一些其他的事情。

请让我知道我在下面的代码中做错了什么。

代码语言:javascript
复制
func startHTTPRouter(routerChannel chan bool){
    router := gin.New()
    // Many REST API routes definitions
    router.Run("<port>")
    routerChannel <- true  // Is this gonna work ? Because Run() again launches a go routine for Serve()
}

func main() {
    routerChannel := make(chan bool)
    defer close(routerChannel)
    go startHTTPRouter(routerChannel )
    for {
        select {
        case <-routerChannel:
            doStuff()  // Only when the REST APIs are available.
            time.Sleep(time.Second * 5)
        default:
            log.Info("Waiting for router channel...")
            time.Sleep(time.Second * 5)
        }
    }
}
EN

回答 1

Stack Overflow用户

发布于 2019-03-11 00:04:06

gin.New().Run()阻塞API。退出后才返回gin服务器。

代码语言:javascript
复制
func startHTTPRouter(routerChannel chan bool) {
    router := gin.New()
    router.Run("<port>")
    routerChannel <- true  // Is this gonna work ? Because Run() again launches a go routine for Serve()
}

下面是gin‘’Run() API。https://github.com/gin-gonic/gin/blob/master/gin.go

代码语言:javascript
复制
// Run attaches the router to a http.Server and starts listening and serving HTTP requests.
// It is a shortcut for http.ListenAndServe(addr, router)
// Note: this method will block the calling goroutine indefinitely unless an error happens.
func (engine *Engine) Run(addr ...string) (err error) {
    defer func() { debugPrintError(err) }()

    address := resolveAddress(addr)
    debugPrint("Listening and serving HTTP on %s\n", address)
    err = http.ListenAndServe(address, engine)
    return
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55088810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档