登录
首页 >  Golang >  Go问答

启动HTTP服务器时发生错误,则返回异步错误

来源:stackoverflow

时间:2024-02-17 19:24:21 414浏览 收藏

珍惜时间,勤奋学习!今天给大家带来《启动HTTP服务器时发生错误,则返回异步错误》,正文内容主要涉及到等等,如果你正在学习Golang,或者是对Golang有疑问,欢迎大家关注我!后面我会持续更新相关内容的,希望都能帮到正在学习的大家!

问题内容

我想在 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
}

正确答案


listenandserve 是一个辅助函数,它打开一个侦听套接字,然后为该套接字上的连接提供服务。

listenandserver 中的启动错误出现在函数的监听部分。在主 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 错误以表示初始化成功,或者关闭通道。这两个操作都可以被主线程接收,并且它将停止被阻塞。

理论要掌握,实操不能落!以上关于《启动HTTP服务器时发生错误,则返回异步错误》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>