什麼是用一些錯誤代碼退出程序的慣用方法?退出錯誤代碼在去?
退出操作的文件說,「該計劃將立即終止;延遲功能無法運行。」,並log.Fatal只是調用退出。對於那些不可怕的錯誤,終止程序而不運行延遲函數似乎極端。
我應該在某個時候通過身邊的一些狀態表明,一直錯誤,然後調用exit(1),在那裏我知道,我可以放心地離開,與已運行的所有推遲的功能呢?
什麼是用一些錯誤代碼退出程序的慣用方法?退出錯誤代碼在去?
退出操作的文件說,「該計劃將立即終止;延遲功能無法運行。」,並log.Fatal只是調用退出。對於那些不可怕的錯誤,終止程序而不運行延遲函數似乎極端。
我應該在某個時候通過身邊的一些狀態表明,一直錯誤,然後調用exit(1),在那裏我知道,我可以放心地離開,與已運行的所有推遲的功能呢?
我一起在我最真實main
包的這些線路的東西,使return err
約定儘快通過,並有一個合適的終端:
func main() {
if err := run(); err != nil {
fmt.Fprintf(os.Stderr, "error: %v\n", err)
os.Exit(1)
}
}
func run() error {
err := something()
if err != nil {
return err
}
// etc
}
確實是。 os包提供了這個。
package main
import "os"
func main() {
os.Exit(1)
}
http://golang.org/pkg/os/#Exit
編輯:所以看起來你知道退出的。這篇文章給出了一個Panic的概述,它會讓返回的函數在返回之前運行。將此與退出一起使用可能是您要查找的內容。 http://blog.golang.org/defer-panic-and-recover
正如FAS提到的,你必須從操作系統封裝func Exit(exitcode int)
。
但是,如果您需要延遲執行的功能應用,你總是可以使用defer
keywork這樣的:
http://play.golang.org/p/U-hAS88Ug4
你執行所有操作,影響一個錯誤變量,並在最後,當一切都清理完畢後,你可以安全地退出。
否則,你也可以使用恐慌/恢復: http://play.golang.org/p/903e76GnQ-
當你有一個錯誤,你恐慌,你清理結束,你趕上(恢復)它。
我想我明白你在第一種方法中的含義,但這個例子有點讓我困惑。爲什麼推遲fct1()和fct2()?這意味着它們將以相反的順序執行!看起來你打算[更像這樣的東西](http://play.golang.org/p/02aNIyQ7K-),或者不是? – marczoid
在Python中我通常使用模式,其轉換後的去看起來像這樣:
func run() int {
// here goes
// the code
return 1
}
func main() {
os.Exit(run())
}
什麼具有的'默認clean'並設置爲'dirty'非致命錯誤全局變量的狀態。在你的'main()'退出之前,你可以檢查這個變量。不是很好,但在某些情況下它可能是最簡單的解決方案。 (我很高興的評論不能donwvoted :)) – topskip
是的,這基本上是我最終做的。我覺得不雅,因爲我必須避免在主推遲任何東西(因爲我仍然調用exit(1)設置返回代碼,並沒有想殺死我的遞延FN),所以我堅持過去曾經是我的主要(只有三行,其中一個是延期)轉化爲函數。我希望有人會有更好的方式。到目前爲止,有一人答道os.Exit,然後刪除他們的答覆,當我註釋掉,我引用在我的崗位在os.Exit文檔,並且現在有一個指向我os.Exit另一個答案。 – dan