Go中的错误(*os.PathError)是什么?

Sła*_*osz 9 go

当我在阅读时:http://golang.org/doc/effective_go.html#errors

我找到了这样一句话:err.(*os.PathError)在这种背景下:

for try := 0; try < 2; try++ {
    file, err = os.Create(filename)
    if err == nil {
        return
    }
    if e, ok := err.(*os.PathError); ok && e.Err == syscall.ENOSPC {
        deleteTempFiles()  // Recover some space.
        continue
    }
    return }
Run Code Online (Sandbox Code Playgroud)

err.(*os.PathError)Go 究竟是什么?

tux*_*21b 17

os.Create返回错误作为第二个返回值.错误本身就是一个界面 type error interface { Error() string }.碰巧有Error方法的任何数据类型都将实现该接口并可以分配.

在大多数情况下,只打印错误就足够了,但在此示例中,您希望ENOSPC显式处理(设备上没有剩余空间).该os包返回*os.PathError在这种情况下,错误的实现,如果你想访问有关的错误,即一切身边的其他信息Error() string,方法,你就必须把它转换.

该语句e, ok := err.(*os.PathError)是一种类型断言.它将检查接口值是否err包含*os.PathError具体类型并将返回该值.如果接口中存储了另一种类型(可能有其他类型实现error接口),那么它将只返回零值和false,即nil, false在那种情况下.


Alb*_*gni 7

文档中,这是一个类型断言:

对于接口类型的表达式x和类型T,主表达式

 x.(T)
Run Code Online (Sandbox Code Playgroud)

声明x不是nil并且存储在x中的值是T类型.符号x.(T)称为类型断言.