go错误处理

news2024/11/28 12:48:24
func test() {
	num1 := 10
	num2 := 0
	result := num1 / num2
	fmt.Println("result", result)

}
func main() {
	test()
	for {
		fmt.Println("运行完毕!   main 下面的代码")
		time.Sleep(time.Second)
	}

}

在这里插入图片描述

  1. 在默认情况下,当发生错误后(panic) ,程序就会退出(崩溃.)
  2. 如果我们希望:当发生错误后,可以捕获到错误,并进行处理,保证程序可以继续执行。还可
    以在捕获到错误后,给管理员一个提示(邮件,短信。。。)
  3. 这里引出我们要将的错误处理机制

基本说明

  1. Go 语言追求简洁优雅,所以,Go 语言不支持传统的 try…catch…finally 这种处理。
  2. Go 中引入的处理方式为:defer, panic, recover
  3. 这几个异常的使用场景可以这么简单描述:Go 中可以抛出一个 panic 的异常,然后在 defer 中
    通过 recover 捕获这个异常,然后正常处理
    使用 defer+recover 来处理错误
func test() {
	defer func() {
		err := recover()
		if err != nil {
			fmt.Println("错误信息:", err)
		}
	}()

	num1 := 10
	num2 := 0
	result := num1 / num2
	fmt.Println("result", result)

}
func main() {
	test()


	for {
		fmt.Println("运行完毕!   main 下面的代码")
		time.Sleep(time.Second)
	}

}

在这里插入图片描述
进行错误处理后,程序不会轻易挂掉,如果加入预警代码,就可以让程序更加的健壮。看一个
案例演示:

在这里插入图片描述

自定义错误
自定义错误的介绍
Go 程序中,也支持自定义错误, 使用 errors.New 和 panic 内置函数。

  1. errors.New(“错误说明”) , 会返回一个 error 类型的值,表示一个错误
  2. panic 内置函数 ,接收一个 interface{}类型的值(也就是任何值了)作为参数。可以接收 error 类
    型的变量, 输出错误信息, 并退出程序.
    案例说明
package main

import (
	"errors"
	"fmt"
	"time"
)

func main() {
	Test2()
	for {
		fmt.Println("运行完毕!   main 下面的代码")
		time.Sleep(time.Second)
	}

}

// 读取文件,传入的参数名称错误返回一个自定义的错误
func ReadConfig(f string) (err error) {
	if f == "Config.init" {
		fmt.Println("读取文件成功!")
		return nil
	} else {
		return errors.New("文件名不是Config.init")
	}
}

func Test2() {
	err := ReadConfig("Config.init00")
	if err != nil {
		panic("取出文件错误。。。")
		fmt.Println("终止运行了!")
	} else {
		fmt.Println("Test2  继续执行")
	}
}

在这里插入图片描述

正确文件
在这里插入图片描述

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

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

相关文章

港联证券|揭秘涨停 旅游板块掀涨停潮

今天,A股三大股指低开低走。沪深两市收盘共38股涨停。剔除7只ST股,合计31股涨停。另外,14股封板未遂,整体封板率为73.08%。 涨停战场:6股封单资金超亿元 港联证券核算,从收盘涨停板封单量来看,…

【Pytorch】数据预处理

Pytorch是机器学习里面常用的框架之一,我们在学习机器学习之前最好需要学习如何使用这个框架对我们将要使用的数据数据进行预处理操作。 如果我们想要学习好pytorch里面的方法,我们需要常去用一下dir()和help()函数,它们一个会帮我们查看某个…

计算机软考考什么?怎么备考啊?

计算机软考是国家承认的计算机职业资格考试,是计算机行业从业者晋升职业等级的重要途径。计算机软考分为三个等级,分别是:初级、中级和高级。 备考计算机软考需要全面准备,下面我将从如何选择考试科目、如何制定学习计划、如何进…

【STL系列】unordered_set和unordered_map

前言 之前,我们介绍了STL中树形结构容器:set、map、multiset、multimap。 在C98中,STL提供了底层为红黑树结构的一系列关联式容器,在查询时的效率可达到O(logN),即最差情况下需要比较红黑树的高度次,但当树中的结点非…

九龙证券|昨夜,大涨!蔚来5.99%,小鹏15.22%,理想6.39%

当地时间周一,美股三大指数低开高走,尾盘小幅收涨。盘面上,银行股、航空股遍及上涨。 展望本周,包括美联储理事沃勒、鲍曼等官员将迎来下月会议沉默期前的最终说话,投资者需关注其对经济和货币政策前景的看法。此外&am…

牛客网华为机考题库 C++

题目汇总HJ2 计算某字符出现次数HJ3 明明的随机数HJ4 字符串分隔HJ5 进制转换HJ6 质数因子HJ7 取近似值HJ8 合并表记录 哈希表HJ9 提取不重复的整数HJ10 字符个数统计HJ11 数字颠倒HJ12 字符串反转HJ13 句子逆序HJ14 字符串排序HJ15 求int型正整数在内存中存储时1的个数HJ16 购…

快速创建springboot+springcloud项目(nacos,seata,sentinel,gateway,openfeign)

一、创建一个maven项目 1.file->new->project 2.创建maven项目 3.删除src文件夹 4.在pom.xml文件中引入springboot和cloudAlibaba依赖 <dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId>&l…

用Python解决Excel问题的最佳姿势

大家好&#xff0c;我是毕加锁。 今天给大家带来的是用Python解决Excel问题的最佳姿势 文末送书&#xff01; 文末送书&#xff01; 文末送书&#xff01; 「问题说明」 这次要处理的excel有两个sheet&#xff0c;要根据其中一个sheet的数据来计算另外一个sheet的值。造成问…

循环神经网络

循环神经网络(Recurrent Neural Network&#xff0c;RNN)与卷积神经网络一样,都是深度学习中的重要部分。循环神经网络可以看作一类具有短期记忆能力的神经网络。在循环神经网络中&#xff0c;神经元不但可以接收其他神经元的信息&#xff0c;也可以接收自身的信息&#xff0c;…

ChatGPT 速通手册——开始提问

开始提问 当我们完成注册后&#xff0c;页面自动会跳转到ChatGPT的主页面&#xff0c;在这里我们就可以开始进行对话了。 我们在页面下方的输入框中填写问题&#xff0c;然后回车或者点击小飞机&#xff0c;我们的问题和ChatGPT的答案就会在页面上方以一问一答的格式展现出来…

Packet Tracer 的安装过程

Packet Tracer 的安装过程 下载地址 链接&#xff1a;https://pan.baidu.com/s/1KO-vJ1p-miU7LXRH92hLww 提取码&#xff1a;ocwu 、双击运行 Crack 文件夹中的"Patch.exe"程序&#xff0c;点击 Patch&#xff1b; 7、即可看到显示激活成功&#xff0c;接下来打开…

Matplotlib学习挑战第四关-网格线grid

Matplotlib 网格线 我们可以使用 pyplot 中的 grid() 方法来设置图表中的网格线。 grid() 方法语法格式如下&#xff1a; matplotlib.pyplot.grid(bNone, whichmajor, axisboth, )b&#xff1a;可选&#xff0c;默认为 None&#xff0c;可以设置布尔值&#xff0c;true 为显…

CentOS 软件包管理

一、文件打包与压缩 1.du命令 --查看目录或文件所占磁盘空间的大小 -h&#xff0c;以K,M,G为单位显示统计结果&#xff08;默认单位为字节&#xff09; -s&#xff0c;查看目录本身的大小 2.打包压缩 tar命令--打包&#xff0c;打包文件的扩展名为.tar…

如何在TypeScript中使用泛型

介绍 泛型是静态类型语言的基本特征&#xff0c;允许开发人员将类型作为参数传递给另一种类型、函数或其他结构。当开发人员使他们的组件成为通用组件时&#xff0c;他们使该组件能够接受和强制在使用组件时传入的类型&#xff0c;这提高了代码灵活性&#xff0c;使组件可重用…

【计算机网络——计算机网络的概念,组成,功能和分类以及相关的性能指标,分层结构和协议,TCP/IP参考模型】

文章目录计算机网络体系结构计算机网络的概念、组成、功能和分类标准化工作及相关组织速率相关的性能指标时延、时延带宽积、PTT和利用率分层结构、协议、接口和服务OSI参考模型TCP IP参考模型计算机网络体系结构 计算机网络的概念、组成、功能和分类 计算机网络的概念 计算…

EasyRecovery免费电脑硬盘数据恢复软件使用教程

EasyRecovery硬盘数据恢复软件采用最新的数据扫描引擎&#xff0c;从磁盘底层读出原始的扇区数据&#xff0c;经过高级的数据分析算法&#xff0c;把丢失的目录和文件在内存中重建出原分区和原来的目录结构&#xff0c;数据恢复的效果非常好。操作简单&#xff0c;向导式的界面…

如何使用katalon studio 完成 get/post 请求发送

前言 katalon studio作为目前最火的自动化测试工具之一&#xff0c;不仅仅只能完成webUI自动化&#xff0c;更是能完成api、app以及桌面应用程序的自动化测试。本文将讲解一下katalon studio是如果完成接口测试的。 请求发送 get请求 1、先在object repository里new一个请求…

代码随想录算法训练营第五十九天 | 503.下一个更大元素II、42. 接雨水

打卡第59天&#xff0c;继续单调栈。 今日任务 503.下一个更大元素II42.接雨水 503.下一个更大元素II 给定一个循环数组 nums &#xff08; nums[nums.length - 1] 的下一个元素是 nums[0] &#xff09;&#xff0c;返回 nums 中每个元素的 下一个更大元素 。 数字 x 的 下…

C++ 类之间的纵向关系-继承

目录 继承的基本概念 定义 使用方法 内存空间 继承下构造析构执行的顺序 构造函数 继承的基本概念 定义 被继承的类叫做基类&#xff08;父类&#xff09;&#xff0c;继承的类叫派生类&#xff08;子类&#xff09;&#xff0c;在子类类名后面加:继承方式 父类 class …

JavaScript概述一

1.JavaScript介绍 1.1 前端三要素 HTML:超文本标记语言&#xff0c;是一种使用标签&#xff08;标记&#xff09;描述网页中的视图内容的语言;CSS&#xff1a;层叠样式表&#xff0c;主要用于美化web页面外观,决定了网页中的视图效果&#xff1b;JavaScript&#xff1a;用于网…