我以前曾在博客中发表有关在Go中创建Web服务器并进行正常关机的操作。
https://marcofranssen.nl/go-webserver-with-gracefull-shutdown/#TLDR
此解决方案效果很好,但是对于更大的项目,我想进一步构建代码。
我已按照以下要点重构了此代码。
https://gist.github.com/marcofranssen/699c1aa97c8a33ab20b5eccada275b08
由于某种原因,尽管正常关机仍像以前一样在go例程中运行,但似乎未执行带有srv.ListenAndServe()
的行。
对我来说,代码看起来相同,只是将其重构为单独的文件并添加了Start函数。
谁能解释我为什么在我发出Interrupt信号后才执行,导致http服务器立即启动和关闭?
答案 0 :(得分:-1)
我在社区的Gopher的帮助下找到了答案。
包含srv.ListenAndServe()
的代码行是阻塞代码行,导致该代码行之后的日志不发生。
在我以前的博客中演示的原始代码中,该日志位于srv.ListenAndServe()
行的前面。因此,在该示例中,相同的代码按预期方式记录到控制台。
因此,毕竟这是一个愚蠢的错误,您可以轻松地多次阅读。基本上有两行代码被交换,我忘记了http.ListenAndServe()
的阻塞行为。
关键提示:
http.ListenAndServe()根据定义正在阻止,因此该行之后将不运行任何代码。