Go-24-异常处理机制
error 接口
type error interface(){ Error() string }
在Go语言中处理错误的方式通常是将返回的错误与nil进行比较。nil值表示没有发生错误,而非nil值表示出现错误。如果不是nil,需打印输出错误。
package main import ( "errors" "fmt" "math" ) // 异常处理机制 error 接口 func main() { num,err:=Sqrt(-100) if err!=nil{ fmt.Println(err) }else{ fmt.Println(num) } } // 定义平法根,算术运算 func Sqrt(num float64)(float64,error){ if num>0 { return math.Sqrt(num),nil }else { return 0,errors.New("负数不可以求算术平方根") } }
自定义接口类型:
step1: 定义一个结构体,表示自定义错误的类型。
step2:让自定义错误类型实现error接口:Error() string。
step3:定义一个返回error的函数。根据程序实际功能而定。
package main import ( "fmt" "strings" ) //step 1:自定义错误结构体 type MyError struct { err string } // step2:让自定义错误类型实现error接口:Error() string func (e MyError) Error() string{ return e.err } // step3: 定义一个返回error的方法 func test(str string) (string,error){ if strings.EqualFold(str,"err"){ return "",MyError{"传入的字符串不可以是err"} } return str,nil } func main() { str,err:=test("err") if err!=nil { fmt.Println(err) }else { fmt.Println(str) } }
defer函数
关键字defer用于延迟一个函数或者方法的执行。defer语句只能出现在函数或方法的内部。
在函数中可以添加多个defer语句。如果有很多调用defer,当函数执行到最后时,这些defer语句会按照逆序执行(报错的时候也会执行),最后该函数返回。
package main import "fmt" //defer 推迟方法的执行 func main() { defer A() B() defer C() fmt.Println("end----------") } func A() { fmt.Println("A-----------") } func B() { fmt.Println("B-----------") } func C(){ fmt.Println("C-----------") }
延迟函数的参数在执行延迟语句时被执行,而不是在执行实际的函数调用时执行。
当一个函数有多个延迟调用时,它们被添加到一个堆栈中,并按后进先出(Last In First Out,LIFO)的顺序执行.
panic和recover机制
不应通过调用panic()函数来报告普通的错误,而应该只把它作为报告致命错误的一种方式。当某些不应该发生的场景发生时调用panic()
Go语言为开发者提供了专用于“拦截”运行时panic的内建函数recover()。recover()可以让进入恐慌流程的Goroutine恢复过来并重新获得流程控制权。
recover() 只在推迟函数种有效。
不要小瞧女程序员
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具