ホームページ  >  記事  >  バックエンド開発  >  Go での「http: 書き込みが宣言された Content-Length を超えています」エラー

Go での「http: 書き込みが宣言された Content-Length を超えています」エラー

WBOY
WBOY転載
2024-02-09 12:50:07677ブラウズ

Go 中的“http:写入超过声明的 Content-Length”错误

phpエディターの真一が今日はGo言語でよく起こる「http:writeが宣言されたContent-Lengthを超えています」エラーについて紹介します。 Go 言語を使用して HTTP リクエストを作成すると、このエラーが発生することがあります。このエラーの理由は、リクエスト ヘッダーで宣言した Content-Length が、実際に送信されるリクエスト本文の長さと一致しないことです。次に、このエラーが発生する原因と解決方法について詳しく説明します。

質問の内容

私は Go を実験していて、ワーカー コルーチンによって処理される HTTP リクエストのキューを管理するアプリケーションを作成しました。

同時実行機能は正常に動作しているようですが、http 応答を送り返すときに次のエラーが発生します: 宣言された Content-Length よりも多くのコンテンツが書き込まれました。

完全なコードは次のとおりです:

リーリー

この問題を解決する方法はありますか?また、私は Go の同時実行性について非常に初心者なので、改善できると思いますか?ありがとう!

解決策

http.Handlerドキュメント:

によると

あなたの ハンドラーは、リクエスト/ライターをキューにプッシュして戻しています。これは、ハンドラーが戻った後に ResponseWriter に書き込もうとしていることを意味し、上記の規定に違反します (同期がないため、書き込みは実際には より前または同時に行われる可能性もあります)。戻る###)。

この問題を解決するには多くの方法がありますが、その 1 つのテクニックは次のとおりです:

リーリー

それは実際には要件によって異なります。一般的な解決策は、チャネルを使用することです (ハンドラーがチャネルにリクエストを送信し、複数のワーカーが同じチャネルから受信します)。

以上がGo での「http: 書き込みが宣言された Content-Length を超えています」エラーの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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