Go-如何优雅的启停

在 Go 中,可以使用操作系统的信号来实现优雅的启动和停止。具体来说,可以在程序中监听 SIGINTSIGTERM 信号,在接收到这两个信号时,优雅地关闭程序。

下面是一个简单的示例:

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 函数退出程序。

 

posted @ 2022-08-31 20:35  GJH-  阅读(157)  评论(0)    收藏  举报