Web服务器正常关闭无法正常工作

时间:2019-06-13 18:13:09

标签: go goroutine servemux

我以前曾在博客中发表有关在Go中创建Web服务器并进行正常关机的操作。

https://marcofranssen.nl/go-webserver-with-gracefull-shutdown/#TLDR

此解决方案效果很好,但是对于更大的项目,我想进一步构建代码。

我已按照以下要点重构了此代码。

https://gist.github.com/marcofranssen/699c1aa97c8a33ab20b5eccada275b08

由于某种原因,尽管正常关机仍像以前一样在go例程中运行,但似乎未执行带有srv.ListenAndServe()的行。

对我来说,代码看起来相同,只是将其重构为单独的文件并添加了Start函数。

谁能解释我为什么在我发出Interrupt信号后才执行,导致http服务器立即启动和关闭?

1 个答案:

答案 0 :(得分:-1)

我在社区的Gopher的帮助下找到了答案。

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

在我以前的博客中演示的原始代码中,该日志位于srv.ListenAndServe()行的前面。因此,在该示例中,相同的代码按预期方式记录到控制台。

因此,毕竟这是一个愚蠢的错误,您可以轻松地多次阅读。基本上有两行代码被交换,我忘记了http.ListenAndServe()的阻塞行为。

关键提示:

  

http.ListenAndServe()根据定义正在阻止,因此该行之后将不运行任何代码。