登录
首页 >  Golang >  Go问答

可以只记录,不改变行为是否可行?

来源:stackoverflow

时间:2024-03-12 08:03:31 247浏览 收藏

最近发现不少小伙伴都对Golang很感兴趣,所以今天继续给大家介绍Golang相关的知识,本文《可以只记录,不改变行为是否可行?》主要内容涉及到等等知识点,希望能帮到你!当然如果阅读本文时存在不同想法,可以在评论中表达,但是请勿使用过激的措辞~

问题内容

我了解如何捕获每个信号

idleConnsClosed := make(chan bool)
SignalChannel := make(chan os.Signal, 1)

// Notify to SignalChannel any signal received
signal.Notify(SignalChannel)

go func() {
    for {
        sig := <-SignalChannel
        log.Notice("Signal %#v received", sig)
        switch sig {
        case syscall.SIGTERM:
            // ok sigterm, I know how to handle with it
            log.Info("ShutDown HTTP server (SIGTERM)")
            if err := server.Shutdown(context.Background()); err != nil {
                // Error from closing listeners, or context timeout:
                log.Error("HTTP server Shutdown: %v", err)
            }
        case syscall.SIGHUP:
            //reinit configurations and do some stuff, I know how to handle this                 
            continue
        case syscall.SIGPIPE:
            //Don't know what to do, just wanted to log it
            continue
        case syscall.SIGABRT:
            //exit with core dump...how to do that ?
            continue
        default:
            // unhandled signal?, ok how to not change it's behavior?
            log.Warning("Unhandled Signal %s received!", sig)
        }
        close(idleConnsClosed)
    }
}()

总的来说,我只是想

  1. 处理一些可以理解的信号 - x
  2. 记录我收到的每个信号 - y
  3. 不改变 y - x 信号的行为

解决方案


Notify 禁用一组给定异步信号的默认行为,而是通过一个或多个注册通道传递它们。我认为这意味着您无法在不改变信号行为的情况下拦截信号。

docs 描述了默认行为:

应该可以捕获信号,处理它,然后模拟适合该信号的默认行为。

本篇关于《可以只记录,不改变行为是否可行?》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>