golang 有没有程序退出时执行的事件

在程序异常退出时,在主方法监听并执行统一的处理. 如果正常状态退出也能监听到就更好了

阅读 10.7k
2 个回答

异常都是靠recover捕捉来恢复的
正常退出的监听, os/signal, 请。
以下只是对于 ctrl + c 的信号捕捉示例

package main

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

func main() { 
    c := make(chan os.Signal) 
    signal.Notify(c)

    //signal.Notify(c, syscall.SIGHUP, syscall.SIGUSR2)  //监听指定信号

    s := <-c //阻塞直至有信号传入 
    fmt.Println("get signal:", s) 
}
新手上路,请多包涵

在main上面套一层就好了

package main

import (
    "fmt"
    "os"
)

func main() {
    os.Exit(run())
}

func run() (code int) {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("panic")
            code = 2
            return
        }
        if code != 0 {
            fmt.Println("err")
            return
        }
        fmt.Println("ok")
        code = 0
    }()
    fmt.Println("run")
    return
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题