2013-08-20 5 views
5

私が読んでいた:http://golang.org/doc/effective_go.html#errorsGoでエラー(* os.PathError)とは何ですか?

を私はそのような行を見つけました:このコンテキストで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 } 

正確ゴーでerr.(*os.PathError)は何? docsから

答えて

14

os.Createは、2番目の戻り値としてエラーを返します。エラー自体はinterfacetype error interface { Error() string }です。何らかのデータ型が発生してErrorメソッドを使用すると、そのインターフェイスが実装され、割り当てることができます。

ほとんどの場合、エラーを印刷するだけで十分ですが、この例では、ENOSPC(デバイスに残っているスペースはありません)を明示的に扱いたいとします。その場合、osパッケージはエラー実装として*os.PathErrorを返します。エラーに関する追加情報、つまりError() stringのメソッドのすべての情報にアクセスするには、それを変換する必要があります。

の文は、type assertionです。インターフェイス値errに具体的な型として*os.PathErrorが含まれているかどうかを確認して返します。別のタイプがインターフェイスに格納されている場合(errorインターフェイスを実装する他のタイプがある場合)、その場合はzero valueとfalse(つまりnil, false)が返されます。

7

は、そのタイプのアサーションである:インターフェイスタイプおよびタイプTのX発現のため

、一次式

x.(T) 

はXであることをアサートxに格納された値がT型であることを示します。x(T)という表記は、型アサーションと呼ばれます。

関連する問題