【go从零单排】Signals、Exit

挪威特罗姆瑟夜景

🌈Don’t worry , just coding!
内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。

📗概念

在 Go 语言中,信号(signals)是操作系统用来通知进程发生某些事件的一种机制。常见的信号包括中断信号(如 Ctrl+C 产生的 SIGINT)、终止信号(SIGTERM)等。Go 提供了 os/signal 包来处理这些信号。

信号的类型:

  • SIGINT:中断信号,通常由 Ctrl+C 触发。
  • SIGTERM:请求程序终止的信号。
  • SIGHUP:挂起信号,通常表示终端关闭。
  • SIGQUIT:退出信号,通常由 Ctrl+\ 触发。

💻代码

Signals

package mainimport (//fmt:用于格式化输出。//os:提供与操作系统交互的功能。//os/signal:用于处理操作系统信号。//syscall:提供系统调用的接口,包含信号常量。"fmt""os""os/signal""syscall"
)func main() {//创建一个信道 sigs,用于接收操作系统信号。信道的缓冲区大小为 1。sigs := make(chan os.Signal, 1)//通过 signal.Notify 函数,注册 sigs 信道以接收 SIGINT(通常由 Ctrl+C 触发)和 SIGTERM(终止信号)这两种信号。signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)//创建另一个信道 done,用于指示信号处理是否完成。done := make(chan bool, 1)//启动一个新的 goroutine(轻量级线程)。go func() {//在 goroutine 中,等待从 sigs 信道接收信号。sig := <-sigs//当接收到信号时,打印一个空行和接收到的信号。fmt.Println()fmt.Println(sig)//将 true 发送到 done 信道,表示信号处理已完成。done <- true}() //结束 goroutine 的定义。fmt.Println("awaiting signal")<-done                 //主 goroutine 在这里阻塞,直到从 done 信道接收到信号,表示信号处理完成。fmt.Println("exiting") //打印退出消息,表示程序即将结束。
}

Exit

在 Go 语言中,os.Exit 是一个用于终止程序的函数。它可以立即停止程序的执行,并返回指定的状态码给操作系统。

package mainimport (//fmt:用于格式化输出。//os:提供与操作系统交互的功能,包括退出程序的功能。"fmt""os"
)func main() {//使用 defer 关键字,这行代码会在 main 函数结束时执行。//通常,defer 用于确保在函数返回时执行某些清理操作或输出。在这里,它会在 main 函数结束时打印一个感叹号 !。defer fmt.Println("!")//调用 os.Exit(3) 函数直接退出程序,并返回状态码 3。//重要的是,os.Exit 会立即终止程序的执行,不会执行任何后续的代码,包括 defer 语句。os.Exit(3)
}

🔍理解

singal

  • 信号处理的并发性:信号处理程序是异步的,可能会在主程序执行时被触发。
  • 优雅退出:通常在接收到信号时,程序会进行一些清理工作(如关闭文件、释放资源等),以确保优雅退出。

Exit

  • 调用 os.Exit 会立即终止当前程序的执行,不会执行任何后续的代码,包括 defer 语句。这一点与其他语言(如 C)类似。
  • 状态码 0:表示程序成功完成,没有错误。
  • 非零状态码:表示程序遇到错误或异常,通常用于指示不同的错误类型。

💡 Tips小知识点

  • 在测试或其他环境中,使用 os.Exit 可能会导致测试框架无法正确捕获测试结果。因此,在测试代码中应避免使用 os.Exit,而是使用 t.Fail() 或其他方式来标记测试失败。

💪无人扶我青云志,我自踏雪至山巅。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/15852.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

PyAEDT:Ansys Electronics Desktop API 简介

在本文中&#xff0c;我将向您介绍 PyAEDT&#xff0c;这是一个 Python 库&#xff0c;旨在增强您对 Ansys Electronics Desktop 或 AEDT 的体验。PyAEDT 通过直接与 AEDT API 交互来简化脚本编写&#xff0c;从而允许在 Ansys 的电磁、热和机械求解器套件之间无缝集成。通过利…

教你制作更方便快捷的电子产品目录!

​在现代工作环境中&#xff0c;电子产品目录进入目录内容的分类的制作。按照电子产品的是至关类型进行重要的分类&#xff0c;环节如&#xff1a;一个清晰、详尽手机、便于、电脑查找的电子产品目录&#xff0c;平板不仅能提高工作效率&#xff0c;还能给客户留下良好的印象。…

硬件工程师之电子元器件—二极管(5)之肖特基二极管

写在前面 本系列文章主要讲解二极管的相关知识&#xff0c;希望能帮助更多的同学认识和了解二极管。 若有相关问题&#xff0c;欢迎评论沟通&#xff0c;共同进步。(*^▽^*) 二极管 9. 肖特基二极管(SBD) 肖特基势垒二极管&#xff08;SBD&#xff09;作为一种二极管&#…

实习冲刺第二十一天

14.最长公共前缀 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀&#xff0c;返回空字符串 ""。 示例 1&#xff1a; 输入&#xff1a;strs ["flower","flow","flight"] 输出&#xff1a;"fl"示例…

游戏引擎学习第11天

视频参考:https://www.bilibili.com/video/BV1QLmDYQE3n 平台层的编写 应该是平台可移植什么的吧 逐项补充说明&#xff1a; 存档位置 在游戏或应用程序中&#xff0c;需要保存用户的进度、设置和数据&#xff0c;存档位置是指存放这些数据的文件夹路径。通常&#xff0c;平台…

炼码LintCode--数据库题库(级别:入门;数量:144道)--刷题笔记_01

目录 炼码LintCode数据库入门级别的笔记未完待续~~~ 炼码LintCode 数据库 入门级别的笔记 笔记如下&#xff0c;把所有涉及到的入门级别的知识点简单总结了一下。 以及一点点举一反三的写法。 增 INSERT INTO 表名 (列1, 列2, ...) VALUES (值1, 值2, ...);批量增 INSERT INT…

ab (Apache Bench)的使用

Apache Bench&#xff08;ab&#xff09;是一个用于基准测试HTTP Web服务器的命令行工具&#xff0c;广泛用于评估和优化Web服务器的性能。以下是关于Apache Bench的详细介绍&#xff0c;包括其功能、使用方法、常用参数和输出结果解析。 功能 性能测试&#xff1a;通过模拟多…

Cellebrite VS IOS18Rebooting

Cellebrite VS IOS18Rebooting我们想分享一些有关 iOS 18 重启“功能”的信息。在过去一周左右的时间里&#xff0c;人们对 iOS 18 中一项新的未记录功能产生了极大关注&#xff0c;该功能会导致设备在一段时间不活动后重新启动。 这意味着&#xff0c;如果设备在一定时间不活…

YZ系列工具之YZ10:VBA_梦幻图像

我给VBA下的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。我的教程一共九套一部VBA手册&#xff0c;教程分为初级、中级、高级三大部分。是对VBA的系统讲解&#xff0c;从简单的…

企业网络安全管理策略

随着互联网和信息技术的飞速发展&#xff0c;网络安全威胁日益严峻&#xff0c;企业若不加强网络安全管理&#xff0c;可能会面临数据泄露、系统崩溃等严重后果。为了帮助企业有效应对这些挑战&#xff0c;以下是网络安全专家为您整理的五个策略&#xff0c;以提升网络安全防护…

如何禁用VMware虚拟网卡

安装VMWare虚拟机之后&#xff0c;会在本地创建两个虚拟网卡VMware Network Adapter VMnet1和VMware Network Adapter VMnet8&#xff0c;如果使用iNode客户端联网时会进行禁用多网卡检测&#xff0c;否则无法联网。因此&#xff0c;问题根源就在于虚拟网卡未禁用。 1、网络和…

11.13机器学习_贝叶斯和决策树

八 朴素贝叶斯分类 1 贝叶斯分类理论 假设现在我们有一个数据集&#xff0c;它由两类数据组成&#xff0c;数据分布如下图所示&#xff1a; 我们现在用p1(x,y)表示数据点(x,y)属于类别1(图中红色圆点表示的类别)的概率&#xff0c;用p2(x,y)表示数据点(x,y)属于类别2(图中蓝色…

Easyui ComboBox 数据加载完成之后过滤数据

Easyui ComboBox 数据加载完成之后过滤数据 需求 在ComboBox 下拉框中过滤包含"物联网"三个字的选项 现状 期望 实现方式 使用 combobox 的方法在加载时过滤 loadFilter 方式一&#xff1a;HTML中编写 <input id"enterpriseDepartmentCode" name&…

vue跳转传参

path 跳转只能使用 query 传参 ,name 跳转都可以 params &#xff1a;获取来自动态路由的参数 query &#xff1a;获取来自 search 部分的参数

div加4个角边框 css

效果&#xff1a; :root {--corner-color: #4ba7f5; } .data-item {position: relative;width: 100px;height: 60px;overflow: hidden;background: linear-gradient(to left, var(--corner-color), var(--corner-color)) left top no-repeat,linear-gradient(to bottom, var(-…

108. UE5 GAS RPG 实现地图名称更新和加载关卡

在这一篇里&#xff0c;我们将实现对存档的删除功能&#xff0c;在删除时会有弹框确认。接着实现获取玩家的等级和地图名称和存档位置&#xff0c;我们可以通过存档进入游戏&#xff0c;玩家在游戏中可以在存档点存储存档。 实现删除存档 删除存档需要一个弹框确认&#xff0…

CAN编程示例之socket CAN

socket CAN概念 socketcan子系统是在Linux下CAN协议(Controller Area Network)实现的一种实现方法。 CAN是一种在世界范围内广泛用于自动控制、嵌入式设备和汽车领域的网络技术。Linux下最早使用CAN的方法是基于字符设备来实现的&#xff0c;与之不同的是Socket CAN使用伯克利…

如何使用.bat实现检测电脑网络连接是否正常?

1、在电脑桌面新建一个记事本文档&#xff0c;将如下内容写进去&#xff1a; echo 正在检查中...echo off ping www.baidu.com -t pause:: 这是注释2、然后&#xff0c;保存一下&#xff0c;再把桌面此文件重命名为检查电脑外网连接.bat 3、双击此程序&#xff0c;可以检测…

C#高级:使用Invoke关键字通过 Type 类型调用指定的方法

demo如下&#xff1a; using System.Reflection; using System;public class Program {public class Calculator{public int Add(int a, int b){return a b;}}public class Student{public string Name { get; set; }}public class Example{// 泛型方法public string Generi…

VTK知识学习(8)-坐标系统

1、概述 计算机图形学里常用的坐标系统有4种&#xff1a; 1&#xff09;、Model坐标系统。定义模型时所采用的坐标系统&#xff0c;通常是局部的笛卡儿坐标系。 2&#xff09;、World坐标系统。是放置Actor的三维空间坐标系。 Actor&#xff08;vtkActor类&am…