ホームページ  >  記事  >  バックエンド開発  >  Go - マルチパート Part.Read の正しい使用法

Go - マルチパート Part.Read の正しい使用法

王林
王林転載
2024-02-09 08:18:271070ブラウズ

Go - 多部分 Part.Read 的正确用法

php エディター Xinyi は今日、Go 言語でのマルチパート Part.Read の正しい使い方を紹介します。 HTTP リクエストを処理するとき、ファイルのアップロードの処理など、データの複数の部分を読み取る必要がある状況がよく発生します。 Go 言語の net/http パッケージには、マルチパート データを読み取るための Part.Read メソッドが用意されていますが、多くの開発者は、これを使用するときにいくつかの問題に遭遇します。この記事では、開発者がマルチパート データをより適切に処理し、プログラムの安定性とパフォーマンスを向上させるために役立つ Part.Read の正しい使用方法を詳しく説明します。見てみましょう!

質問の内容

非常に大きなファイルのアップロード (> 20GB) のために http からの読み取りを支援するために multipart.part を使用しようとしているので、以下のコードを書きました。非常にうまく機能します:

リーリー

ただし、最も内側の for ループでは、eof をチェックする前に part.read から読み取る必要があることがわかりました。これを事前に実行して中断すると、最後のブロックを見逃してしまうことに気づいたからです。ただし、他の多くの記事や投稿で、人々は最後の読み取りを使用せずにエラー/eof をチェックし、存在する場合は break-ing をチェックしていることに気づきました。 multipart.part.read() を間違って/安全に使用していますか?

回避策

multipart.partを正しい方法で使用しています。

multipart.part は、 go.dev/io#reader" rel="nofollow noreferrer">io.reader の 固有の 実装です。したがって、規則に従い、io.reader のアドバイスに従う必要があります。ドキュメントからの引用:

呼び出し元は、エラー err を考慮する前に、返された n > 0 バイトを常に処理する必要があります。これにより、許可された eof 動作だけでなく、一部のバイトの読み取り後に発生する i/o エラーも正しく処理できるようになります。

また、この例では、データを io.reader から os.file にコピーしていることに注意してください。 os.file io.readerfrom インターフェイスを実装すると、file.readfrom() メソッドを使用してデータをコピーできます。 p> リーリー

バッファを使用する必要がある場合は、io.copybuffer() 関数を使用できます。ただし、io.readerfrom 実装を非表示にする必要があることに注意してください。そうしないと、バッファ がコピーを実行するために を使用しなくなります。例を参照してください: 123

リーリー

以上がGo - マルチパート Part.Read の正しい使用法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。