Go中如何比较errno?
How to compare errno in Go?
在Cgo中,你不能直接获取errno的值,但是你可以使用double return值调用一个函数后得到它的结果。例如ret, err := C.write(...)
。但是,这个 err
似乎只是一个不透明的错误接口,无法与 errno 常量进行比较。我该怎么做,例如像这样:
ret, err := C.my_func()
if ret == -1 {
// error signaled
if err == C.EAGAIN {
// do it again
} else {
return err
}
} else {
...
}
此代码自 invalid operation: err == _Ciconst_EAGAIN (mismatched types error and int)
后无法编译。这可能吗?
错误类型将为 syscall.Errno
,您可以对其进行断言和比较。
ret, err := C.my_func()
if errno, ok := err.(syscall.Errno); ret == -1 && ok {
// error signaled
if errno == C.EAGAIN {
// do it again
} else {
return err
}
}
在Cgo中,你不能直接获取errno的值,但是你可以使用double return值调用一个函数后得到它的结果。例如ret, err := C.write(...)
。但是,这个 err
似乎只是一个不透明的错误接口,无法与 errno 常量进行比较。我该怎么做,例如像这样:
ret, err := C.my_func()
if ret == -1 {
// error signaled
if err == C.EAGAIN {
// do it again
} else {
return err
}
} else {
...
}
此代码自 invalid operation: err == _Ciconst_EAGAIN (mismatched types error and int)
后无法编译。这可能吗?
错误类型将为 syscall.Errno
,您可以对其进行断言和比较。
ret, err := C.my_func()
if errno, ok := err.(syscall.Errno); ret == -1 && ok {
// error signaled
if errno == C.EAGAIN {
// do it again
} else {
return err
}
}