我指的是这篇文章:云运行时的正常关闭该示例概述了如何在 Node.js 中执行此操作。在Golang中如何做到这一点?简单地将其添加到方法中是否有任何问题?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) }()}
2 回答
翻阅古今
TA贡献1780条经验 获得超5个赞
我们有示例 Go 代码,用于在 https://github.com/GoogleCloudPlatform/golang-samples/pull/1902 正确处理信号。它尚未合并,但实质上突出了如何在Go上正确执行此操作。
请注意,在本地运行时,将Ctrl+C发送到您的应用程序是SIGINT,但是在Cloud Run上,您将获得SIGTERM。同样重要的是,要正确传递取消并优雅地处理服务器关闭,同时不丢弃正在进行的请求(但是,正如您将在示例代码中看到的那样,它会为您处理其中的很大一部分)。net/http.Server
明月笑刀无情
TA贡献1828条经验 获得超4个赞
在Golang中如何做到这一点?
处理 Go 中正常关闭的一种惯用方法是使用一个语句来阻止主 goroutine 侦听任何信号。从那里,您可以在必要时触发所有正确的关机。select
例如:
select {
case err := <-anyOtherError:
// ...
case signal := <- c:
// Handle shutdown e.g. like http Server Shutdown
}
我喜欢在函数中设置它,并执行其他启动任务,例如启动服务器,配置等。run
- 2 回答
- 0 关注
- 124 浏览
添加回答
举报
0/150
提交
取消