Go语言error错误处理

error

Go语言内置错误接口类型,任何类型只要是实现了Error()string方法,都可以传递error接口类型变量。Go语言典型的错误处理方式是将error作为函数最后一个返回值。在调用函数时,通过监测其返回的error值是否为nil来进行错误处理

Go语言标准库提供的两个函数返回实现了error接口的具体类型实例,一般的错误可以使用如下两个函数进行封装,遇到复杂的错误,用户也可以自定义错误类型,只要实现error错误接口即可。

go 复制代码
func Errorf(format string, a ...interface{}) error {
	return errors.New(fmt.Sprintf(format, a...))
}

func New(text string) error {
	return *errorString{text}
}

实际案例

go 复制代码
import "fmt"

func math(x, y int) (int, error) {
	if y == 0 {
		return 0, fmt.Errorf("参数错误")
	}
	return x * y, nil
}

func main() {
	// 一旦参数正确则执行相乘,并且异常值为空值
	num1, err1 := math(1, 2)
	if err1 == nil {
		fmt.Println(num1)
	}
	// 一旦参数错误,则error返回错误信息
	_, err2 := math(1, 0)
	if err2 != nil {
		fmt.Println(err2)
	}
}

错误和异常

Go语言是一门类型安全的语言,其运行时不会出现无法捕捉的错误,也就是没有异常全是错误。

错误分两类

  • 运行时错误,此类错误在运行时或者编写时就能被发现或者捕获,隐式或显式的抛出panic
  • 逻辑错误,就是程序可以正常运行,但是运行的结果是错误的。
    第一种错误无法避免,只能是尽量的recover住这些错误,避免因为一个错误导致整个程序崩溃。

在实际的编程中,error和panic的使用应该遵循如下三条原则:

  • 程序局部代码执行结果不符合预期,这种行为不应该影响程序运行,此类场景应该使用函数返回error错误类型进行处理。
  • 程序运行时出现错误,Go语言会自动调用panic输出堆栈信息去定位错误,这个需要使用recover()去捕获该类异常。
  • 程序局部代码执行结果不符合预期,并且后续此结果对程序运行有重大影响,则需要手动调用panic去抛出异常终止程序运行。
相关推荐
郑州光合科技余经理7 小时前
本地生活服务系统:成品模块和定制接口怎么划界
java·前端·人工智能·后端·系统架构·php·ai编程
萧瑟余晖8 小时前
Java深入解析篇三十三之密封类与接口(Sealed Classes)详解
java·开发语言
论迹复利11 小时前
FreeRTOS 在 RISC-V 上是如何“点火“的 —— 从 main() 到第一个任务的完整链路
java·开发语言·risc-v
张宇Joaquin12 小时前
鲲鹏统一并行加速库KUPL--众核并行能力介绍
java·开发语言·网络
736c12 小时前
C语言-数组 07
c语言·开发语言
宸津-代码粉碎机12 小时前
AI攻防战升级!基于Spring AI构建Java应用自动免疫安全体系
java·大数据·开发语言·人工智能·python·安全·spring
朦胧之13 小时前
PostgreSQL 数据库笔记
人工智能·后端
xcLeigh14 小时前
Go入门:整数类型的溢出与安全边界
java·安全·golang
LorryJovens14 小时前
【LAAP科研】CEN因果等价网络理论---从双缝干涉到因果等价
开发语言·php
Brilliantwxx15 小时前
【Linux】 进程(10) 进程控制深度解析:创建、终止与等待
linux·运维·服务器·c语言·开发语言·网络