提出例外

use*_*368 4 exception go

我想提出一个异常,因为它是用Python或Java制作的 - 用错误信息完成程序 - .

可以将错误消息返回给父函数:

func readFile(filename string) (content string, err os.Error) {
    content, err := ioutil.ReadFile(filename)
    if err != nil {
        return "", os.ErrorString("read " + filename + ": " + err)
    }
    return string(content), nil
}
Run Code Online (Sandbox Code Playgroud)

但是我想要在发现错误时完成它.下一个会是正确的吗?

func readFile(filename string) (content string) {
    content, err := ioutil.ReadFile(filename)

    defer func() {
        if err != nil {
            panic(err)
        }
    }()

    return string(content)
}
Run Code Online (Sandbox Code Playgroud)

Eva*_*haw 8

按照惯例,Go不会做这样的事情.它有panicrecover,有点像例外,但它们只在非常特殊的情况下使用.找不到文件或类似文件根本不是特殊情况,而是非常规的情况.特殊情况是取消引用nil指针或除以零之类的事情.

  • 这取决于应用程序的级别.对于快速和脏的脚本,原型等,它可能是一个不可恢复的错误; 不是因为它无法完成,而是因为编写这三行不值得. (2认同)