为了账号安全,请及时绑定邮箱和手机立即绑定

优雅地退出 go 应用程序

优雅地退出 go 应用程序

Go
莫回无 2022-01-17 18:07:26
我是 Go 新手,我正在运行一些小服务。当我部署一个新版本时,我通常只是上传新的二进制文件、kill现有的进程并开始一个新的进程。我想知道这是否是正确的做法,或者是否有更好的方法来做到这一点。
查看完整描述

1 回答

?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

杀死进程,替换和重新启动没有任何问题。如果您想在退出时进行一些清理,您可以执行以下操作:


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在终止之前调用函数。


查看完整回答
反对 回复 2022-01-17
  • 1 回答
  • 0 关注
  • 107 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信