В разделе «Пакет ввода-вывода» учебного пособия Go есть следующий фрагмент:
func OpenFile(name string, mode int, perm uint32) (file *File, err os.Error) {
r, e := syscall.Open(name, mode, perm)
if e != 0 {
err = os.Errno(e)
}
return newFile(r, name), err
}
syscall.Open()
имеет эту подпись:
func Open(path string, mode int, perm uint32) (fd int, errno int)
Так что я думаю, что можно с уверенностью предположить, что os.Error
- это всего лишь тот целочисленный код ошибки, просто с добавленным пухом и вашим подходом к проверке, чтобы он был верным.
Чтобы выяснить, почему err == os.EAGAIN
не работает для васЯ бы напечатал ошибку как значение типа int
, а затем нашел файл вашей платформы errno.h
для напечатанного значения.