相关疑难解决方法(0)

Go中的尾部调用优化

到目前为止,Go编程语言是否优化尾调用?如果没有,它是否至少优化了函数的尾递归调用?

tail-recursion go tail-call-optimization

32
推荐指数
3
解决办法
7699
查看次数

Go中是否可以恢复所有运行时错误?

我认为一个等效的问题是-是否所有运行时错误都可能致命,恐慌?因为任何恐慌都应该可以恢复。我不是在谈论从诸如os.Exit(),或log.Fatal(),Go运行时中的错误或某人通过电源线跳闸中恢复,而是从其他运行时错误中恢复,这将导致程序崩溃。

这是可以通过紧急/恢复捕获的运行时错误的示例:

package main

import (
    "fmt"
)

func errorHandler() {
    r := recover()
    err := r.(error)
    if err == nil {
        return
    }
    fmt.Println(err.Error())
}

func foo() {
    defer errorHandler()
    smallSlice := []int{1, 0, 1}
    smallSlice[10] = 1
}

func main() {
    foo()
    fmt.Println("recovery, end of main")
}
Run Code Online (Sandbox Code Playgroud)

输出:

运行时错误:索引超出范围
恢复,主程序结束

是否有一些示例,其中运行时错误将使程序崩溃而没有可恢复的恐慌?

go

8
推荐指数
2
解决办法
214
查看次数