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

时间:2013-08-20 16:34:14

标签: 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 }

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

2 个答案:

答案 0 :(得分:16)

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

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

声明e, ok := err.(*os.PathError)type assertion。它将检查接口值err是否包含*os.PathError作为具体类型并将返回该值。如果接口中存储了另一种类型(可能还有其他类型实现error接口),那么它只会返回zero value和false,即nil, false

答案 1 :(得分:7)

docs开始,这是一个类型断言:

  

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

 x.(T)
  

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