典型Go代碼(它使用os
包)不分析所述返回的錯誤的對象。它只是向用戶打印錯誤消息(誰知道哪裏出錯了基於打印的消息)或返回錯誤原樣給調用者。
如果您想防止程序打開不存在的文件,或者想要檢查文件是否可讀/可寫,我會在打開文件之前建議使用os.Stat函數。
你可以分析轉到類型返回的錯誤的,但這似乎不方便:
package main
import "fmt"
import "os"
func main() {
_, err := os.Open("non-existent")
if err != nil {
fmt.Printf("err has type %T\n", err)
if err2, ok := err.(*os.PathError); ok {
fmt.Printf("err2 has type %T\n", err2.Error)
if errno, ok := err2.Error.(os.Errno); ok {
fmt.Fprintf(os.Stderr, "errno=%d\n", int64(errno))
}
}
fmt.Fprintf(os.Stderr, "%s\n", err)
os.Exit(1)
}
}
它打印:
err has type *os.PathError
err2 has type os.Errno
errno=2
open non-existent: no such file or directory
的感謝!當錯誤是因爲文件存在但不可讀時,如果我想要執行某些特定的操作,該怎麼辦?或者當文件不存在時有什麼不同? – g06lin 2011-12-21 20:50:01