Golang を開発する場合、他のインターフェイスにリクエストを送信して、応答本文のコンテンツを読み取る必要があることがよくあります。しかし、実際の開発では本文の読み込みエラーが発生することが多いので、その原因と解決策を探ってみましょう。
1.1. ネットワーク リクエストのタイムアウト
ネットワーク リクエストの送信後、指定された時間内に応答が受信されない場合、タイムアウトが発生します。この場合、レスポンスボディの内容の読み取りは失敗します。
解決策: タイムアウト エラーの場合は、コンテキスト パッケージを使用してタイムアウトを設定し、そのようなエラーを回避できます。
1.2. HTTP リクエストのステータス コードの例外
HTTP リクエストを作成するときに、401、403 などの特定のステータス コードを受信すると、サーバーはエラー メッセージを返します。 time、read 応答本文の内容の取得は失敗します。
解決策: HTTP リクエストでは、応答ステータス コードによってリクエストが成功したかどうかを判断できます。ステータス コードが 200 以外の場合は、エラー情報を読み取ることで例外プロンプトを取得できます。
サンプルコード:
resp, err := http.Get("https://example.com") if err != nil { log.Fatal(err) } defer resp.Body.Close() if resp.StatusCode != http.StatusOK { data, _ := ioutil.ReadAll(resp.Body) log.Println("Response Error: ", string(data)) return } body, err := ioutil.ReadAll(resp.Body) if err != nil { log.Fatal(err) }
1.3. ネットワーク接続例外
ネットワークリクエストを行う際、ネットワーク接続が異常な場合、レスポンスボディの内容の読み込みに失敗します。
解決策: ネットワーク接続の安定性を確保するには、ネットワーク接続のタイムアウトを増やすことができます。また、ネットワーク接続の中断などの異常な状況に対しては、例外処理を実行する必要があります。
サンプルコード:
client := &http.Client{ Timeout: time.Second * 10, } resp, err := client.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close() if resp.StatusCode != http.StatusOK { data, _ := ioutil.ReadAll(resp.Body) log.Println("Response Error: ", string(data)) return } body, err := ioutil.ReadAll(resp.Body) if err != nil { log.Fatal(err) }
Golang開発では、ネットワークなどのさまざまな状況でレスポンスボディの内容の読み込み失敗が発生することがあります。リクエストタイムアウト、HTTPリクエストステータスコード例外、ネットワーク接続例外など合理的な例外処理とエラー判定により、これらの問題によるプログラムへの悪影響を回避できます。同時に、ネットワーク リクエストを送信するときは、コードの信頼性と効率性を確保するために、Golang が提供する標準ライブラリを使用することをお勧めします。
以上がgolang 本文の読み取りエラーの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。