- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我不会围棋。我正在浏览文档以了解该语言,并遇到了 Defer Panic Recover 功能。
panic 似乎像异常一样工作。但是我找不到我的代码如何防止这些异常,这些异常可以由我调用的层下面的层抛出。 Java 有检查异常。 Go有类似的东西吗?
这是如何运作的?
编辑:似乎有两种思考方式
我的问题是关于在类似 2 的情况下使用 panic,这似乎很容易实现。
最佳答案
当然,您可以使用 panic 来控制程序的正常流程,但我认为更惯用的方法是在这种情况下(例如用户输入格式错误的情况)向调用者返回错误。
Panic 通常用于暗示程序中存在某种错误的异常情况。如果出现问题,您可以自己调用 panic,但在 nil 指针取消引用、数组访问越界和其他类似情况下,它也会自动调用。通常这样的事情应该使程序崩溃,默认情况下它会这样做,但是如果您的程序是某种服务,您可能不希望整个程序崩溃,您只是希望它在遇到时停止正在做的事情崩溃并恢复到正常状态。
以Web服务器为例,如果一些奇怪的请求由于某些错误导致越界访问数组。您不希望整个服务器崩溃,而是希望它退出该请求的处理函数,但继续监听新请求。示例二中很好地描述了这样做的方法。因此,您在希望 panic 停止的地方推迟 recover() 函数。如果 recover 返回一个错误,你就知道你的程序发生了 panic 。然后你可以做一些日志记录,也许给自己发一封电子邮件说出了什么问题等等,然后继续正常的程序流程。但是,如果您有一些验证功能注意到请求有问题,您可能不希望它出现 panic 。相反,您希望它向调用者(请求处理程序)返回一个错误,然后调用者可以用 400 错误请求来回答请求,然后正常退出处理程序。
关于go - Go 代码如何计划异常( panic )?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43679677/
在Go(go1.2.1 linux/amd64)中运行http服务器时,我遇到了一个罕见的错误。 unexpected fault address 0xb84004 fatal error: faul
使用以下代码: var i interface{} = "hello" f, ok := i.(float64) fmt.Println(f, ok) f = i.(float64) // panic
考虑以下故意导致双重 panic 的代码: use scopeguard::defer; // 1.1.0 fn main() { defer!{ panic!() }; defer!
如果我传递给 std::panic::set_hook 的函数发生 panic 会怎样? 我可以想象对此做出多种 react :考虑这个 UB,中止程序 like C++ does ,为新的 pani
我有一个 string,当我想获取 i 索引处的值时它会崩溃,但是当我切出相同的 string 保持较低的索引值作为长度然后它不会 panic 。想知道 1 和 2 有何不同? func main()
看起来不可能从 panic 中的 panic 中恢复过来? func TestError(t *testing.T) { e := &myErr{p: false} fmt.Print
当我使用 cargo test 运行以下程序时: use std::panic; fn assert_panic_func(f: fn() -> (), msg: String) { let
在开发过程中,我遇到了崩溃,并显示了内核 panic 上传模式。 有没有办法以某种方式连接到设备并提取日志? 最佳答案 我希望这就是您正在寻找的...来源:StackOverflowAndroid 创
我需要制造内核 panic ,我尝试了以下操作 sysctl kernel.panic=0 && echo c > /proc/sysrq-trigger 当我运行上面的命令时。我看到系统总是重新启动
是否可以从 recover 中“重新抛出”错误并保留原始堆栈跟踪?我知道的最好的办法就是再次 panic ,但这确实会创建一个新的堆栈跟踪。 func do() { defer func()
我正在使用 panic::catch_unwind引起 panic : use std::panic; fn main() { let result = panic::catch_unwind
func sub(){ defer func (){ panic(2) }() panic(1) } func main(){ defer func()
考虑到我使用的是原始的“errors”go 包。 还有,panic(11) 和 panic("11") 之间的区别? 最佳答案 panic定义为 func panic(v interface{}),调
我是 golang 的新手。在定义位置后 try catch 主 block 中的错误后,我的程序出现 panic 。我在某处读过,添加 defer.close() 可能会有所帮助,但编译器再次说你的
有这种新的编程语言 V-lang由亚历克斯·梅德维尼科夫 (Alex Medvednikov) 创建。我目前使用的是 V-lang 0.1.11 版。我可以在 V-lang 中声明一个数组,如下所示:
在启动 linux 时,我在控制台上得到以下打印,并且系统挂起。 Waiting for root device /dev/mmcblk0p2... mmc_host mmc0: Bus speed
我已经实现了这个 answer 中提到的 goroutine 的生产者-消费者模式.但它有时会出现 panic ,并出现错误提示:“ panic :同步:负 WaitGroup 计数器”。我有如下示例
上下文: https://github.com/fusspawn/tserver/blob/master/app/controllers/gorp.go 作为尝试设置 gorm 的一部分,我尝试转换标
专注Golang,Python语言,云原生,人工智能领域得博主 过去经历的意义在于引导你,而非定义你, 只要我们足够努力,任何人都有无限潜力 panic 抛出异常函数 recove
这个问题在这里已经有了答案: How to return a value in a Go function that panics? (3 个回答) 2年前关闭。 package main impor
我是一名优秀的程序员,十分优秀!