做牙的网站叫什么,商城推广 网站建设,网站广告图片在线制作,十堰做网站最好的公司编程笔记 Golang基础 040 defer、panic 和 recover 一、defer二、panic三、recover小结 在Go语言中#xff0c;defer、panic 和 recover 是一组用于错误处理和控制程序流程的关键字。它们之间的交互有助于实现异常处理机制#xff0c;并确保资源的正确释放。 一、defer
defe… 编程笔记 Golang基础 040 defer、panic 和 recover 一、defer二、panic三、recover小结 在Go语言中defer、panic 和 recover 是一组用于错误处理和控制程序流程的关键字。它们之间的交互有助于实现异常处理机制并确保资源的正确释放。 一、defer
defer 关键字用于延迟函数调用直到包含它的函数执行完毕时才执行无论是正常返回还是通过 panic 中止。它通常用于资源清理工作比如关闭文件、解锁互斥锁或重置状态等。defer 的执行遵循后进先出LIFO顺序即最后被 defer 的函数最先执行。
func example() {file, err : os.Open(file.txt)if err ! nil {// 处理错误return}defer file.Close() // 确保无论函数如何结束文件最终都会被关闭// ... 其他操作 ...
}二、panic
panic 函数用于触发运行时恐慌这是一个可以传播到调用栈顶部的严重错误信号。当一个函数调用了 panic它会立即停止当前函数的执行并开始回溯调用栈同时传递给 panic 的参数作为恐慌值。如果恐慌没有被捕获则程序将终止。
func mightPanic(s string) {if s {panic(empty string is not allowed) // 触发恐慌}// ... 其他逻辑 ...
}func main() {mightPanic() // 如果传入空字符串将会触发panic并终止程序
}三、recover
recover 函数用于捕获当前 goroutine 中的 panic。它只能在 deferred 函数内部有效因为 panic 发生时goroutine 会暂停当前的函数调用并查找最近的未执行的 defer 调用在该 defer 函数内调用 recover 可以捕获恐慌并恢复正常的控制流。如果不发生 panicrecover 将返回 nil。
func handlePanic() {if r : recover(); r ! nil {log.Printf(Recovered from panic: %v, r)// 这里可以进行错误处理和修复工作}
}func mightPanicWrapped() {defer handlePanic()mightPanic() // 如果发生panic会被handlePanic内的recover捕获并打印信息// 恢复后的代码不会被执行
}小结
defer 延迟执行函数确保资源在函数退出前得到妥善处理。panic 用来表示无法恢复的错误情况引发运行时恐慌。recover 用于捕获当前 goroutine 中的 panic使得程序有机会从恐慌中恢复并执行相应的清理或恢复逻辑。然而recover 并非用于常规错误处理而是针对异常情况和程序健壮性设计。