Go Web服务器正常关闭未按预期工作

Go Web服务器正常关闭未按预期工作,go,goroutine,servemux,Go,Goroutine,Servemux,我以前写过一篇关于在Go中创建一个Web服务器的博客 这个解决方案非常有效,但是对于一个更大的项目,我想进一步构造代码 我已经按照以下要点重构了这段代码 由于某种原因,srv.ListenAndServe()行似乎没有被执行,而优雅的关机仍然像以前一样在go例程中运行 对我来说,代码看起来完全相同,只是被重构成不同的文件并添加了一个Start函数 有谁能解释一下,为什么在我发出中断信号之前,它不会执行,导致http服务器立即启动和关闭?我在社区的一位同事的帮助下找到了答案 包含srv.Lis

我以前写过一篇关于在Go中创建一个Web服务器的博客

这个解决方案非常有效,但是对于一个更大的项目,我想进一步构造代码

我已经按照以下要点重构了这段代码

由于某种原因,
srv.ListenAndServe()
行似乎没有被执行,而优雅的关机仍然像以前一样在go例程中运行

对我来说,代码看起来完全相同,只是被重构成不同的文件并添加了一个Start函数


有谁能解释一下,为什么在我发出中断信号之前,它不会执行,导致http服务器立即启动和关闭?

我在社区的一位同事的帮助下找到了答案

包含
srv.ListenAndServe()
的代码行是一个阻塞代码行,导致此代码行之后的日志不会发生

在我之前的博客中演示的原始代码中,我将此日志与
srv.ListenAndServe()
放在一行的前面。因此,在该示例中,与预期相同的代码被记录到控制台

所以,毕竟这是一个愚蠢的错误,你可以轻易地读很多遍。基本上是交换了两行代码,我忘记了http.ListenAndServe()的阻塞行为

钥匙外卖:

http.ListendServe()被定义为阻塞,因此不会在该行之后运行任何代码


寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。