package os
func IsExist(err error) bool
func IsNotExist(err error) bool
func IsPermission(err error) bool
func IsNotExist(err error) bool {
//注意:不健壯
return strings.Contains(err.Error(), "file does not exist")
}
package os // PathError 記錄了錯誤以及錯誤相關的操作和檔案路徑 type PathError struct { Op string Path string Err error } func (e *PathError) Error() string { return e.Op + " " + e.Path + ": " + e.Err.Error() }很多用戶端忽略了 PathError,改用一種統一的方法來處理所有的錯誤,即呼叫 Error 方法。PathError 的 Error 方法只是拼接了所有的欄位,而 PathError 的結構則保留了錯誤所有的底層資訊。對於那些需要區分錯誤的用戶端,可以使用型別斷言來檢查錯誤的特定型別,這些型別包含的細節遠遠多於一個簡單的字串。
_, err := os.Open("/no/such/file")
fmt.Println(err) // "open /no/such/file: No such file or directory"
fmt.Printf("%#vn", err)
//輸出:
// &os.PathError{Op: "open", Path: "/no/such/file", Err:0x2}
import ( "errors" "syscall" ) var ErrNotExist = errors.New("file does not exist") // IsNotExist返回一個布林值,該值表明錯誤是否代表檔案或目錄不存在 // report that a file or directory does not exist. It is satisfied by // ErrNotExist 和其他一些系統呼叫錯誤會返回 true func IsNotExist(err error) bool { if pe, ok := err.(*PathError); ok { err = pe.Err } return err == syscall.ENOENT || err == ErrNotExist }實際使用情況如下:
_, err := os.Open("/no/such/file")
fmt.Println(os.IsNotExist(err)) // "true"