c - 如何比较 Go 中的 errno?

标签 c go cgo

在 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/

相关文章:

go - 加扰/解扰整数值到/从十六进制字符串

包之间的 golang : can i share C. int

c - FAT 文件系统和大量写入

c - 如何打印结构体timeVal

c - 在 C 中的 char[] 上使用 printf(%s,...) 的神秘输出

go - 从 C 调用的 Go 中的整数除法

golang(cgo) --- 不确定 C.quit 的名称类型

c - lua 函数的警报消息

build - 如何根据操作系统在 Go 中设置变量

Golang如何将字符串 slice 转换为字符串?