Go:异步启动HTTP服务器,但如果启动失败,则返回错误

我想在goroutine中启动HTTP服务器,但如果启动失败,其父级将返回错误。有没有一个好的方法来做到这一点?我尝试在通道中传递错误。但是,即使服务器成功启动,这也会使父块生效(除非我引入了在该通道上进行侦听的任意超时)。


func Start() error {

  go func() {

     srv = &http.Server{...}

     if err := srv.ListenAndServe(); err != http.ErrServerClosed {

       // return err from Start()

     }

  }

  // return nil if server started successfully

}


料青山看我应如是
浏览 158回答 2
2回答

大话西游666

ListenAndServe是一个帮助器函数,它打开一个监听套接字,然后在该套接字上提供连接。ListenAndServer 中的启动错误位于函数的 listen 部分中。在主 goroutine 上创建侦听器并在那里处理错误。在 goroutine 中运行服务器:l, err := net.Listen("tcp", ":8080") // adjust arguments as needed.if err != nil {    // Handle error.}srv = &http.Server{...}go func() {   if err := srv.Serve(l); err != nil {       // Handle non-startup errors here. }()

萧十郎

如果要坚持该模式,请通过通道发送错误以指示初始化成功或关闭通道。主线程可以拾取这两个操作,它将停止被阻止。nil
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go