我想在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.
}()
- 2 回答
- 0 关注
- 157 浏览
添加回答
举报
0/150
提交
取消