実装するインターフェイスを使用するio.ReadWriteCloser
と、通常io.EOF
、io.ErrUnexpectedEOF
エラーが返されます。net.Listener
を実装io.Closer
しているため、このエラーも返されると予想されますが、残念ながらこの規則には従いません。代わりに、net.go でプライベートに宣言された errClosing を返します。
によって返されるエラーnet.Listener
は でラップされnet.OpError
ます。この構造体には、役立つ可能性のある追加情報が含まれています。具体的には、"Op" と "Err" です。「Op」は、エラーが発生した場所を示します。実行するClose() error
と、「accept」が返されます。ドキュメントには、「読み取り」と「書き込み」を戻すこともできると書かれています。
を取得するには、次のようnet.OpError
にします。
err := server.Serve(l)
if opErr, ok := err.(*net.OpError); ok {
// opErr.Op, opErr.Err, ...
}
net.Listener
または、次のように (常に a を返すと仮定してnet.OpError
):
err := server.Serve(l).(*net.OpError)
net.OptError.Err は元のエラーを返します。これは、エラーがエクスポートされた場合に役立ちます。いずれにせよ、将来のバージョンで壊れる可能性があるため、文字列をチェックすることはお勧めしません。持っていないエクスポートされたエラーとエラーを直接比較することをお勧めします。
net.OptError
関数もTemporary() bool
宣言されています。net/http
パッケージはこれを使用して、増加する間隔で接続を再確立します。したがって、 の場合、net/http
返されるエラーは を呼び出した結果であると想定しますClose() error
。それ以外の場合Temporary() bool
は true が返さnet/http
れます。