在 Cgo 中,不能直接获取 errno 的值,但是可以使用 double 返回值在函数调用后得到它的结果。例如ret, err := C.write(...)
.但是,似乎是这样 err
只是一个不透明的错误接口(interface),不能与 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
}
}
关于c - 如何比较 Go 中的 errno?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64067102/