Go-如何优雅的启停
在 Go 中,可以使用操作系统的信号来实现优雅的启动和停止。具体来说,可以在程序中监听 SIGINT 和 SIGTERM 信号,在接收到这两个信号时,优雅地关闭程序。
下面是一个简单的示例:
package main import ( "fmt" "os" "os/signal" "syscall" "time" ) func main() { // 创建一个信号通道 sigs := make(chan os.Signal, 1) // 监听 SIGINT 和 SIGTERM 信号 signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM) // 启动程序 fmt.Println("start") go run() // 等待信号 <-sigs // 接收到信号后,进行优雅关闭 fmt.Println("shutdown") shutdown() } func run() { for { fmt.Println("running") time.Sleep(time.Second) } } func shutdown() { // 执行一些清理工作,例如关闭数据库连接、关闭文件句柄等 fmt.Println("clean up") // 等待一段时间,确保清理工作完成 time.Sleep(time.Second) // 退出程序 os.Exit(0) }
首先创建了一个信号通道 sigs,并通过 signal.Notify 函数监听 SIGINT 和 SIGTERM 信号。然后,我们在 main 函数中启动程序,并等待信号。当接收到信号时,我们调用 shutdown 函数进行优雅关闭,其中可以执行一些清理工作,并在最后调用 os.Exit 函数退出程序。

浙公网安备 33010602011771号