2010-05-12 114 views
3

我想提出一个异常,因为它是在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 
} 

,但我想它可以是当发现错误完成。下一个会是正确的吗?

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

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

    return string(content) 
} 

回答

8

按照惯例,Go不会这样做。它有panic and recover,它们有点像例外,但它们只用于非常特殊的情况。没有找到一个文件或类似的东西根本不是一个特殊的情况,而是一个非常规则的情况。例外情况是像提取nil指针或除以零。

+1

这取决于应用程序的级别。对于快速和肮脏的脚本,原型等,它可能是一个不可恢复的错误;不是因为它不能完成,而是因为写这三行是不值得的。 – 2010-05-12 14:11:40

+0

够公平的。只是不要在发布的软件包或应用程序中做这种事情,并期望我使用它。 :) – 2010-05-12 14:18:07