二十三、错误处理

2024-08-24 07:20
文章标签 错误处理 二十三

本文主要是介绍二十三、错误处理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、使用errors包

1、处理读取文件时

2、创建错误

3、创建错误格式

4、从函数中返回错误

二、慎用panic

1、错误使用方式

2、正确使用方式


错误处理,其实就是居安思危,预想到某块可能会出现问题,进而编辑好代码进行处理

一、使用errors包

1、处理读取文件时

在go语言中err非常独特,可以将err信息传递给函数和方法

func main() {file, err := os.ReadFile("/Users/text.md")if err != nil {fmt.Println(err)}fmt.Println(file)
}

结果:

open /Users/text.md: no such file or directory
[]
解释:

使用file,err := 这里非常方便的将os.ReadFile函数返回值中错误信息给到err和字节切片给到file

2、创建错误

使用go中的errors包的new方法进行创建

func main() {err := errors.New("this is an error")if err != nil {fmt.Println(err)}
}
3、创建错误格式
func main() {name, role := "zs", "dru"err := fmt.Errorf("the %v %v quit", name, role)if err != nil {fmt.Println(err)}
}

结果:

the zs dru quit
解释:

在上述代码中%v %v占位符把name,与role的变量值进行替换

4、从函数中返回错误
func Half(numberToHalf int) (int, error) {if numberToHalf%2 != 0 {return -1, fmt.Errorf("can not half %v", numberToHalf)}return numberToHalf / 2, nil
}func main() {n, err := Half(9)if err != nil {fmt.Println(err)return}fmt.Println(n)
}

结果:

can not half 9
解释:

创建一个函数用于判断值是否能被2整除,不能整除就报错

使用n, err := Half(9)调用方法并接收返回值,发现err不为空则打印err信息并且return不再执行下面的代码

二、慎用panic

panic是go语言的内置函数,将终止程序继续运行

1、错误使用方式
func main() {fmt.Println("this will panic")panic("good bye")fmt.Println("this end panic")}

结果:

this will panic
panic: good bye

goroutine 1 [running]:
main.main()
        /Users/xueqijun/go-workspace/Panics.go:7 +0x68
 

解释:

如此使用会导致程序崩溃,没有机会执行

fmt.Println("this end panic")
2、正确使用方式
	err := errors.New("this is an error")if err != nil {panic(err)}
}

在发生错误时,为了避免运行下面程序带来更多的问题,所以选择了让程序崩溃停止执行

这篇关于二十三、错误处理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1101818

相关文章

ubuntu 编译android SDK错误处理

1.提示错误curses.h: No such file or directory 是因为没有安装ncurses sudo apt-get install libncurses5-dev 2./usr/bin/ld: cannot find -lncursesw collect2: ld returned 1 exit status make[1]: ***

Flink实战案例(二十三):自定义时间和窗口的操作符(四)window functions之增量聚合函数(一)ReduceFunction

实例一 例子: 计算每个传感器15s窗口中的温度最小值 val minTempPerWindow = sensorData.map(r => (r.id, r.temperature)).keyBy(_._1).timeWindow(Time.seconds(15)).reduce((r1, r2) => (r1._1, r1._2.min(r2._2))) 实例二 ReduceFun

sql server 安装及 错误处理方法

最近学校学习.net,要用到sql server。一般来说,管理数据库一种是像mySQL一样,在命令行那个黑乎乎的窗口下敲命令管理(但是我没有找到如何在命令行下管理sql server),那会显的你很牛B;另一种就是安装一个像SQLyog这样的可视化数据库管理软件,sql server 2008 management studio就是这样的软件。大部分同学已经安装了Visual Studio 2

原 荐 Mybatis3.4.x技术内幕(二十三):Mybatis面试问题集锦(大结局)

http://toutiao.com/a6331394026365780226/?tt_from=mobile_qq&utm_campaign=client_share&app=news_article&utm_source=mobile_qq&iid=5367969992&utm_medium=toutiao_ios

ARM32开发——(二十三)存储器介绍

1. 存储器分类 存储器按其存储介质特性主要分为“易失性存储器”和“非易失性存储器”两大类。 “易失/非易失”是指存储器断电后, 它存储的数据内容是否会丢失的特性。 在计算机中易失性存储器最典型的代表是内存,非易失性存储器的代表则是硬盘。 2. RAM Random access memory 随机存取存储器,缩写:RAM,也叫主存,是与CPU直接交换数据的内部存储器。它可以随

剑指Offer之二十三-从上往下打印二叉树

二叉树结构 class TreeNode {int val = 0;TreeNode left = null;TreeNode right = null;public TreeNode(int val) {this.val = val;}} 题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印。 解析 考察层序遍历每一次打印一个结点的时候,如果该结点有子节点,则把该结点的子

redis面试(二十三)写锁释放

先加了写锁,后面再次加写锁或者读锁 anyLock: { “mode”: “write”, “UUID_01:threadId_01:write”: 2, “UUID_01:threadId_01”: 1 } 写锁的释放lua脚本在这里 RedissonWriteLock.unlockInnerAsync() 比如说现在的参数是这 KEYS[1] = anyLock KEYS[2] = r

Fastboot线刷“复活”之刷机心得(三)——错误处理

在刷机的过程中可能不会是一帆风顺的,至少我是这样的,总是会遇到这样或者那样的问题,以下是我为大家总结一些问题和解决的方法,希望能对大家有所帮助。 一、电量问题     刷机和系统更新有一个共同的前提保障,要想让过程能够顺利进行,我们需要保证有充足的电量(50%以上),所以在刷机和更新前都需要充好电。但是如果遗忘了,如果能及时发现就请赶快连接充电器吧! 二、模式问题     如果无法

错误处理与调试

任何程序都会有错,如何发现错误并解决呢,这是一个相当重要的问题,听过这么一句话“程序都是调试出来的”,我们不可能一次性写出一个完美的,那就必须学会调试。而JavaScript在错误处理调试上一直是它的软肋,如果出错,会给人一些摸不着头脑的提示,今天就来看一下如何调试JS,让我们能够清晰地找到错误之处。  ECMA-262错误分类:     必须先了解错误的分类,这样即使出现问题也

【Jenkins】构建错误处理方法整理

以下错误处理的前提是本地代码测试成功后,并提交SVN服务器。 一、Jenkins构建步骤          有依赖关联,先集成itoo-exam-student-core,再集成itoo-exam-student-web,也就是说先集成被依赖的一方的,再集成依赖的一方。 1、从SVN上当下最新代码 2、从Maven下载资源并编译 3、将编译测试好的内容放到je