登录
首页 >  Golang >  Go问答

如何在Go语言中比较错误码errno?

来源:stackoverflow

时间:2024-03-19 15:48:21 132浏览 收藏

在 Go 语言中,Cgo 无法直接获取 errno 值。不过,可以通过函数调用的双返回值获取 errno 结果,但该错误值是一个不透明的错误接口,无法与 errno 常量比较。为此,可以使用 syscall.Errno 类型进行断言和比较,以便检查 errno 值并执行相应操作。

问题内容

在cgo中,你不能直接获取errno的值,但你可以在函数调用后使用双返回值获取它的结果。例如ret,错误:= 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 操作,此代码无法编译:err == _ciconst_eagain(类型错误和 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
    }
}

好了,本文到此结束,带大家了解了《如何在Go语言中比较错误码errno?》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>