为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
料青山看我应如是 2022-08-24 10:32:31
我想在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}
查看完整描述

2 回答

?
大话西游666

TA贡献1817条经验 获得超14个赞

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.

 }()


查看完整回答
反对 回复 2022-08-24
?
萧十郎

TA贡献1815条经验 获得超13个赞

如果要坚持该模式,请通过通道发送错误以指示初始化成功或关闭通道。主线程可以拾取这两个操作,它将停止被阻止。nil



查看完整回答
反对 回复 2022-08-24
  • 2 回答
  • 0 关注
  • 157 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信