Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go:异步启动HTTP服务器,但如果启动失败,则返回错误_Http_Go_Goroutine - Fatal编程技术网

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

Go:异步启动HTTP服务器,但如果启动失败,则返回错误,http,go,goroutine,Http,Go,Goroutine,我想在goroutine中启动HTTP服务器,但是如果启动失败,它的父服务器将返回错误。有什么好办法吗?我尝试在通道中传递错误。但是,即使服务器成功启动,这也会导致父块出现(除非我在该通道上引入了侦听的任意超时) ListendServe是一个帮助函数,它打开一个侦听套接字,然后为该套接字上的连接提供服务 ListendServer中的启动错误位于函数的侦听部分。在主goroutine上创建侦听器并在那里处理错误。在goroutine中运行服务器: l, err := net.Listen(&q

我想在goroutine中启动HTTP服务器,但是如果启动失败,它的父服务器将返回错误。有什么好办法吗?我尝试在通道中传递错误。但是,即使服务器成功启动,这也会导致父块出现(除非我在该通道上引入了侦听的任意超时)


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

ListendServer中的启动错误位于函数的侦听部分。在主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.
 }()

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

ListendServer中的启动错误位于函数的侦听部分。在主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
错误,以表示初始化成功,或关闭通道。主线程可以拾取这两个操作,并且它将停止被阻止。

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

使用任意超时有什么问题
listendandserve
阻塞,直到服务器关闭;通过将非
Start
函数包装到
Start
函数中,您正在更改调用的语义,并且您必须以某种方式对此进行解释。使用任意超时有什么问题
listendandserve
阻塞,直到服务器关闭;通过将非
Start
函数包装到
Start
函数中,您正在更改调用的语义,并且您必须以某种方式对此进行解释。那么您何时将
nil
发送到该频道?在
srv.ListenAndServe()之前?那么,到那时就不会发生错误了。或者在
srv.ListenAndServe()?
之后,这只会在服务器再次关闭后发生,因此它并不能真正解决手头的问题。那么您何时将
nil
发送到该频道?在
srv.ListenAndServe()之前?那么,到那时就不会发生错误了。或者在
srv.ListenAndServe()之后?
好吧,这只会在服务器再次关闭后发生,因此它并不能真正解决手头的问题。