问题描述
在Cgo中,您不能直接获取errno的值,但是可以在使用双返回值的函数调用之后获得errno的结果。例如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
}
}