How do I check for specific types of error among those returned by ioutil.ReadFile?
According to the current API, ioutil.ReadFile
doesn't guarantee any specific behaviour except that it will return err == nil
when successful. Even the syscall package doesn't actually guarantee a specific error.
The current implementation of ioutil.ReadFile
uses os.Open
, which will return *os.PathError
when failing to open a file, not os.ErrPermission
or anything else. os.PathError
contains a field Err
which is also an error - in this case, a syscall.Errno
. The string "permission denied" is produced from a private table of error messages and it's both architecture and implementation-specific. In my Windows machine it says "Access is denied" instead.
AFAIK, the correct method is to use os.IsPermission(err)
, which will return true
in case of lacking permissions.