一段良好的程序永远不应该发生panic异常

简介: panic来自被调函数的信号,表示发生了某个已知的bug。一段良好的程序永远不应该发生panic异常对于大部分程序而言,永远无法保证能够成功运行,因为错误原因往往超出程序员的控制范围。任何进行io操作的程序都会面临出错的可能,只有无经验的程序员才会相信读写操作不会失败。

panic来自被调函数的信号,表示发生了某个已知的bug。一段良好的程序永远不应该发生panic异常

对于大部分程序而言,永远无法保证能够成功运行,因为错误原因往往超出程序员的控制范围。任何进行io操作的程序都会面临出错的可能,只有无经验的程序员才会相信读写操作不会失败。

处理错误的五种策略:

1. 传递错误

response, err := http.Get(url)
    if err != nil {
        return nil, err
    }

2. 重新尝试错误的操作:

对于偶然性发生的错误如网络请求超时、数据库连接超时,可以进行重试,但需要限制重试的时间或次数

3. 输出错误并结束程序

response, err := http.Get(url)
    if err != nil {
        fmt.Fprintf(os.Stderr, "fetch:%v\n", err)
        os.Exit(1)
    }

4. 输出错误,继续执行

if err := Ping(); err != nil {
    log.Printf("ping failed: %v; networking disabled", err)
}

5. 直接忽略错误

比如数据库中一个分类删除后,对应的分类目录也要被删除,但不管这个目录是否被成功删除,都不影响这个分类删除的基本目的,出现这种情况,返回相应错误消息供调用者记录而整体结果不受影响。

目录
相关文章
|
1月前
|
C++
C++ 捕获所有异常并拿到错误原因的方法
C++ 捕获所有异常并拿到错误原因的方法
|
3月前
start.S详解学习(六):异常中断处理
start.S详解学习(六):异常中断处理
32 0
|
6月前
|
Go C++ 索引
太狠了!原来panic可以直接干掉程序
太狠了!原来panic可以直接干掉程序
60 0
打印全部异常堆栈、ExceptionUtils.getFullStackTrace这样最快
打印全部异常堆栈、ExceptionUtils.getFullStackTrace这样最快
228 0
|
2月前
|
Go
Go语言中的异常处理:理解panic与recover
【2月更文挑战第7天】Go语言虽然以简洁和直接错误处理机制而著称,但它也提供了`panic`和`recover`这两个内置函数来处理程序中的异常情况。本文将深入探讨Go语言中的异常处理机制,包括`panic`和`recover`的使用场景、原理以及最佳实践,帮助读者更好地理解如何在Go中处理异常情况。
|
2月前
|
Java Go
浅谈defer、panic、recover 三者的用法
浅谈defer、panic、recover 三者的用法
15 0
|
2月前
|
Rust 安全 开发者
Rust中的错误处理策略:Result类型与Panic
Rust语言以其强大的内存安全和并发编程能力而著称。在Rust中,错误处理是一个核心概念,其独特的处理方式体现在Result类型和Panic机制上。本文将深入探讨这两种错误处理策略在Rust中的应用,以及它们如何帮助开发者构建更加健壮和安全的程序。
|
3月前
|
网络协议 BI Go
Go-异常处理(defer recover panic)
Go-异常处理(defer recover panic)
30 0
|
8月前
|
Go
Go异常处理机制panic和recover
Go异常处理机制panic和recover
76 0
|
9月前
|
Go
goroutine传参panic,原因在源码中找到了
goroutine传参panic,原因在源码中找到了