我指的是这篇文章:云运行的优雅关闭
该示例概述了如何在Node.js中执行此操作。
在戈朗怎么能做到这一点?简单地将它添加到func init()方法中有什么问题吗?
func shutdownGracefully() {
c := make(chan os.Signal)
signal.Notify(c, os.Interrupt, syscall.SIGTERM)
go func() {
<-c
// Do some cleanup stuff here...
os.Exit(0)
}()
}发布于 2021-03-29 19:18:00
我们在https://github.com/GoogleCloudPlatform/golang-samples/pull/1902有适当的信号处理的示例Go代码。它还没有被合并,但本质上强调了如何在Go中正确地完成这个任务。
请注意,在本地运行时,向应用程序发送Ctrl+C是一个SIGINT,但是在云运行时,您将得到SIGTERM。同样重要的是,在不删除正在进行的请求的同时,正确地传递取消并优雅地处理服务器关机(不过,正如您将在示例代码中看到的那样,net/http.Server为您处理了相当大的一部分)。
发布于 2021-03-29 14:44:59
在戈朗怎么能做到这一点?
在go中处理优雅关闭的一种惯用方法是让一个select语句阻塞主要的goroutine,侦听任何信号。从那里,您可以触发所有适当的关闭时,必要。
例如:
select {
case err := <-anyOtherError:
// ...
case signal := <- c:
// Handle shutdown e.g. like http Server Shutdown
}我喜欢在run函数中设置它,并执行其他启动任务,比如启动服务器、信任等等。
https://stackoverflow.com/questions/66854761
复制相似问题