Golang的error和panic

news2024/10/6 12:21:55

博客主页:🏆看看是李XX还是李歘歘 🏆

🌺每天不定期分享一些包括但不限于计算机基础、算法、后端开发相关的知识点,以及职场小菜鸡的生活。🌺

💗点关注不迷路,总有一些📖知识点📖是你想要的💗 

目录

Error

Panic


 Golang有两种错误处理机制,分别是error和panic。

error一般是程序员可预知的,在意料之中的错误,会进行合适的处理,如打开件失败、检测输入是否合法等。而panic是不应该出现问题的地方出现了问题,程序员无法预知的异常,例如空指针或数组越界等。

Error

Eoor是通过返回值的形式来出来,要么忽略错误,要么处理错误,一般我们会在发生错误时,种植程序,返回error给调用者并且记录错误日志,对于golang这种设计方式,我们会在代码中写大量的if判断,以便做出决定。

func main() {
	conent,err:=ioutil.ReadFile("filepath")
	if err !=nil{
		//错误处理
        //记录error信息
	}else {
		fmt.Println(string(conent))
	}
}

对于err如果是nil就代表没有错误,如果不是nil就代表程序出问题了,需要对错误进行处理了。

Go 提供了两种创建error的方法,分别是:errors.New和fmt.Errorf

func main() {
    fmt.Println(errors.New("错误"))
    fmt.Println(fmt.Errorf("错误"))
}

Panic

Panic是程序员无法预知的,如果没有提前设置解决方案,一旦出现,将直接导致程序崩溃。Go的类型系统会在编译时捕获很多错误,但有些错误,如数组访问越界、空指针引用等只能在运行时检查。这些运行时错误会引起painc异常。

在Golang中,panic、defer和recover经常同时出现,用于异常处理,类似在Java中的try catch finally 处理机制。

recover 是一个 Go 语言的内建函数,可以让进入宕机流程中的 goroutine 恢复过来。recover只在defer调用的函数中有效,并且defer要在panic之前先注册,否则不能捕获异常。当panic被捕获到后,被注册的函数将获得程序控制权。

func dopanic()  {
	err := recover()
	if err!=nil {
		fmt.Println("panic")
	}
}

func main() {
	defer dopanic()
	n := 0
	res := 1 / n
	fmt.Println(res)
}

其他

当panic异常发生时,程序会中断运行,并立即执行在该goroutine(可以先理解成线程)中被延迟的函数(defer 机制), panic() 后面的代码将不会被运行,这也是为什么defer要在panic之前先注册的原因。

 

参考:

(43条消息) 详谈GoLang的panic和error_golang panic_渣渣帅的博客-CSDN博客

(43条消息) Golang错误处理机制(error 与 panic)_Marvellous丶的博客-CSDN博客_panic和error的区别 

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

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

相关文章

Python入门自学进阶-Web框架——30、DjangoAdmin项目应用-自定义用户认证续

一、前面实现的是DjangoAdmin实现的自定义用户认证管理,现在自己来实现管理功能,即在mytestapp中增加用户认证管理功能。 在UserProfile的model中,对password字段增加help_text属性: password models.CharField(_(password), m…

Linux 环境安装 jdk 或 openjdk

一、linux 环境安装JDK的tar.gz包,通用命令: 1、查看已安装的JDK版本rpm -qa | grep jdk2、删除不需要的JDK版本:rpm -e --nodeps java-1.8.0-openjdk3、解压新JDK至/usr/lib/jvm目录下tar -zxvf openjdk-1044_linux-x64_bin_ri.tar.gz -C /…

AOSP刷机笔记

下载官方镜像,下载对应AOSP,编译出的*.img替换到官方镜像对应的文件, 刷入 把证书放到aosp源码的system/ca-certificates/files文件夹里,lunch aosp_sailfish-user编译可以实现无root抓包 mkdir ~/bin PATH~/bin:$PATH curl -sSL https://ger…

什么是集中采购 集中采购管理软件介绍

什么是集中采购? 集中采购是指企业总部某特定部门对企业所有采购进行管控,他们负责获取整个组织需要的物资。这个部门负责与供应商联络、供应商寻源、合同管理、风险分析,以及从供应商那里获得所需物资的每项工作。 企业采用集中采购管理模…

什么叫joinquant量化策略?

joinquant量化主要是在数据挖掘上有特别的意义,不像平时我们在执行各个量化选股策略时,还要一个一个去输入去查询。而joinquant量化策略在开发方面就简便了很多,joinquant量化策略是运用到个股量化交易中能够针对各个股票数据都能快速挖掘出来…

mongodb安装和部署,并整合到Springboot

mongodb安装和部署,并整合到Springboot 1.linux上docker安装mongodb docker pull mongo:4.4.18使用docker命令启动: docker run -p 27017:27017 --name mongo \ -v /mydata/mongo/db:/data/db \ -d mongo:4.4.18运行容器 docker exec -it mongo /bin/bash# 进入…

C进阶_字符串查找库函数

strstr 查找strstr的文档,可知它的原型为: char *strstr( const char *string, const char *strCharSet ); 它的返回值,根据文档是这样的: Return Value Each of these functions returns a pointer to the first occurrence …

使用 YonBuilder 进行报表分析 - 扩展篇

使用 YonBuilder 进行报表分析 - 扩展篇 在上一篇文章中,我们讲解了如何构建简单的报表以及交叉表的基础配置。本篇文章通过对主子表、树型表以及数据穿透的创建来对 YonBuilder 的报表配置进行扩展介绍。 创建报表 首先,要先创建一个员工信息实体&…

CSS选择器整理学习(中)

书接上回,在前端项目开发中,有时候需要对特殊的元素进行特殊的处理,但有时候元素的位置不确定、层级不确定、数量不确定等问题,导致我们没办法进行元素的选择,这个时候我们就需要用到元素选择器了。 一、CSS选择器 1…

加油站视频监控智能分析盒基于yolov5

加油站视频监控智能分析盒基于yolov5人工智能视觉技术,对现场画面中明火和烟雾以及人员抽烟、打电话等违规行为进行识别。除此之外,还可以对现场画面中卸油时灭火器未按要求正确摆放以及静电释放时间不足和人员离岗等不规范行为进行自动预警。YOLOv5在YO…

【云原生】k8s图形化管理攻击之rancher

内容预知 前言 1. Rancher的相关知识 1.1 Rancher的简介 1.2 Rancher与k8s的关系及区别 1.3 Rancher具有的优势 2. Rancher的安装部署 2.1 实验环境与部署图分配 2.2 具体的部署操作 (1)在 rancher 节点下载 rancher 镜像 (2&#xff…

程序员同事每天准点下班,原来是用了这6个开发工具

工欲善其事必先利其器,要想更加高效的做事情,就得先将工具变得锋利。那么对于程序员来说同样也是如此,如果要想每天早点下班,就必须借助于一些开发工具来提高自己的工作效率,今天就给大家总结一些工作中常用到的工具。…

【算法题解】11. 判断链表是否有环,并返回入环节点

文章目录题目解法一:循环标记Java代码实现Go 代码实现复杂度分析解法二:快慢指针Java 代码实现Go 代码实现复杂度分析这是一道 中等难度 的题,是 判断链表是否有环 的扩展,在有环的情况下返回入环节点, 依然是两种解法…

Disney 流媒体广告 Flink 的应用实践

摘要:本文整理自 Disney 广告智能执行总监郝又超、Disney 广告智能实时计算负责人李丁哲,在 FFA 主会场的分享。本篇内容主要分为四个部分:Disney 流媒体广告与实时应用业务场景实现实时平台构建未来展望Tips:点击「阅读原文」查看…

kafka.2 集群搭建

文章目录1.启动kakfa自带的zk2.启动kafka集群3.查看zookeeper的kafka节点信息启停kafka集群脚本创建主题增加分区模拟生产消费模拟消费组消费主题,查看offset1.启动kakfa自带的zk 参考:https://blog.csdn.net/justlpf/article/details/127261664?utm_m…

通俗易懂的java设计模式(7)-原型模式

1.什么是原型模式? 原型模式提供了一种创建对象的模式,它是指用原型实例创建对象的种类,并且通过拷贝这些原型,创建新的对象。用一个很生动形象的例子:孙悟空拔出一根猴毛,变出其他和自己一模一样的小孙悟…

Linux三剑客之Sed

目录 一、认识sed 二、使用sed 命令格式 常用选项options 地址定界 编辑命令command sed用法 常用选项: 地址界定演示 编辑命令command演示 sed高级编辑命令 一、认识sed sed 是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行…

《Linux Shell脚本攻略》学习笔记-第九章

9.1 简介 计算机系统是由一组硬件及控制这些硬件的软件组成的。 Linux既提供了能够检查这些系统当前性能的交互式程序,也提供了用于记录一段时间内系统性能表现的模块。 9.2 监视磁盘使用情况 磁盘空间是一种有限的资源。 du和df命令可以报告磁盘使用情况&#xff0…

消息中间件如何选型 图解 Kafka vs RabbitMQ vs RocketMQ 的差异

综述 Kafka 采用拉取 ( Pull) 方式消费消息,吞吐量相对更高,适合海量数据收集与传递场景,例如日志采集和集中分析缺点 Kafka 单机超过 64 个队列/分区,Load 会发生明显的飙高现象,队列越多,load 越高&#…

linux基本功系列之chage命令实战

文章目录前言一. chage命令的介绍二. 常用案例示范1. 查看用户密码的有效期2. 设置密码的过期时间3. 设置账号的失效时间总结前言 前言🚀🚀🚀 想要学好Linux,命令是基本功,企业中常用的命令大约200多个,不管…