go - 优雅地退出 go 应用程序

标签 go

我是 Go 的新手,我有一些小服务正在运行。

当我部署一个新版本时,我通常只上传新的二进制文件,杀死现有进程并启动一个新进程。

我想知道这样做是否正确,或者是否有更好的方法。

最佳答案

杀掉进程,更换,重启没有错。如果您想在退出时进行一些清理,您可以执行以下操作:

import(
   "fmt"
   "os"
   "os/signal"
   "syscall"
)

func main(){
   //work here

   go gracefulShutdown()
   forever := make(chan int)
   <-forever
}

func gracefulShutdown() {
    s := make(chan os.Signal, 1)
    signal.Notify(s, os.Interrupt)
    signal.Notify(s, syscall.SIGTERM)
    go func() {
        <-s
        fmt.Println("Sutting down gracefully.")
        // clean up here
        os.Exit(0)
    }()
}

如果您确实 kill {pid}(没有 -9 开关),进程将在终止前调用 gracefullShutdown 函数。

关于go - 优雅地退出 go 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37798572/

相关文章:

arrays - 在 Go 中创建 JSON 数组

go - 避免在类型转换的分支中使用类型断言

go - 如何检查 Cloud Pub/Sub 模拟器是否已启动并正在运行?

go - 从go中的另一个文件导入 map 变量

go - 如何强制从本地目录安装依赖项

go - 如何在函数之间传递带有chan的变量

ssl - golang tls.Config CiperSuites 不限制客户端认证

c - Go 系统调用 vs. C 系统调用

go - golang 应用程序的 Makefile 到 gradle 转换

api - beego评论路由器