2010-05-12 43 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