#Go 言語の Reader インターフェイスは Read 操作を定義しており、Reader インターフェイスを実装する人は誰でも Read 関数を使用できます。 バッファへのデータの p) バイト数 pn は、今回読み取られた実際のバイト数を示します (0 # #err この読み取り操作のエラー レポートを示します (存在する場合、そうでない場合は nil)
n で読み取られたバイト数が len(p) より小さい場合でも、呼び出し本体は関数中にそれを使用することもあります。 p のすべての空間 (この説明が何を表現しているのかわかりません)
データを読み込むとき、len(p) が足りなくても (IO キャッシュにデータがありません)この時点では)、通常、読み取り操作は直接実行されます。IO バッファーにさらにデータが到着するのを待ち続けるのではなく、取得したデータを返します。
Return n (>0) とこの読み取り操作中にエラー (非 nil)
または、この読み取り操作は n (>0) と nil を返し、次の呼び出しでは 0 とエラー (非 nil) を返します
両方操作は可能であるため、呼び出し元は、err が nil かどうかを最初に判断するのではなく、常に最初に n>0 に従って返されるデータがあるかどうかを判断する必要があります。
たとえば、特定の呼び出しが終了に達したときなどです。 n バイトのデータが必要な場合、Reader は次の 2 つの方法で実装できます。
現在の呼び出しは n と EOF エラーを返します
現在の呼び出しは n と EOF エラーを返しますnil であり、次の呼び出しでは 0 が返されます。また、EOF
Read の実装は 0 と nil を返してはなりません。つまり、0 を返すときは、バッファ領域のサイズが異なる場合を除き、非 nil エラーを返す必要があります。が 0 の場合、呼び出し元は 0 の呼び出しを無視する必要があり、nil などの戻り値の組み合わせは何も起こらなかったかのように扱われます。この戻り値が EOF
を示していないことが特に強調されます。以上がgolang はブロックを読み取りますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。