Go+ 信号处理教程(4.27)

Posted Data-Mining

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go+ 信号处理教程(4.27)相关的知识,希望对你有一定的参考价值。

目录

Go+ 概述

正文

导入包

os.Signal

signal.Notify

信号处理


Go+ 概述

Go+ 是一门融合工程开发的 Go、数据科学领域的 Python、编程教学领域的 Scratch,以 Python 之形结合 Go 之心,让工程师处理数据不需要学习新的开发语言,让初学者学习编程、开发作品的门槛更低的编程语言。

正文

有时我们希望 Go+ 程序能够智能地处理信号。例如,服务器在收到 SIGTERM 信号时正常关闭,或者命令行工具在收到 SIGINT 信号时停止处理输入操作。Go+ 提供了信号处理的相关方法,今天我们就来了解一下这方面的一些内容。

导入包

Go+ 在处理信号时,一般使用的工具库是 os/signal 包,导入方式如下:

import (
    "os/signal"
)

os.Signal

os.Signal 是 Go+ 中的信号量,Go+ 信号通知一般是通过在通道上发送 os.Signal 信号量来工作的。我们可以创建一个通道来接收这些通知,示例代码如下:

sigs := make(chan os.Signal, 1)
done := make(chan bool, 1)

signal.Notify

signal.Notify 方法是用来给通道注册接收特定信号通知的,示例代码如下:

signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)

上面的注册方法说明通道 sigs,只能接收处理 syscall.SIGINT 和 syscall.SIGTERM 两种信号量。

信号处理

接下来,我们创建一个协程对信号执行阻塞接收。当它得到一个信号时,会把它打印出来,然后通知程序可以完成。

示例代码:

import (
    "os"
    "os/signal"
    "syscall"
)

sigs := make(chan os.Signal, 1)
done := make(chan bool, 1)

signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)

go func() 
    sig := <-sigs
    println()
    println(sig)
    done <- true
()

println("等待信号中。。。")
<-done
println("程序结束")

执行结果:

timeout running program
等待信号中。。。

interrupt
程序结束

亲自试一试! 

以上是关于Go+ 信号处理教程(4.27)的主要内容,如果未能解决你的问题,请参考以下文章

绝地刺激战场4.27透视小黑红绿紫人加速lua脚本

Go命令教程3. go install

[Go] 通过 17 个简短代码片段,切底弄懂 channel 基础

解决go: go.mod file not found in current directory or any parent directory; see ‘go help modules‘(代码片段

4.27 函数返回值和作用域

Go 系列教程 ——第 25 篇:Mutex