ホームページ > バックエンド開発 > Golang > Go で HTTP リクエストを効果的に終了するにはどうすればよいですか?

Go で HTTP リクエストを効果的に終了するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-11-25 08:18:13
オリジナル
782 人が閲覧しました

How to Effectively Terminate HTTP Requests in Go?

Go での HTTP リクエストの終了

Go では、HTTP ハンドラーの ServeHTTP() メソッドから戻ることで HTTP リクエストを終了できます。 。このアプローチにより、リクエストを終了し、クライアントにレスポンスを送信できます。

例:

http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    // Examine incoming parameters
    if !ok {
        str := `{"Result":"","Error":"No valid Var"}`
        fmt.Fprint(w, str)
        return // Terminate the request
    }

    // Continue normal API serving
})
ログイン後にコピー

注:

  • API の入力パラメーターが返されたときに、デフォルトの 200 OK の代わりに HTTP エラー コードを返すことを検討してください。は無効です。この目的には http.Error() 関数を使用します。

例:

http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    // Examine incoming parameters
    if !ok {
        http.Error(w, `Invalid input params!`, http.StatusBadRequest) 
        return // Terminate the request
    }

    // Continue normal API serving
})
ログイン後にコピー
  • さらに制御するには、ヘッダーとJSON エラー応答を返す

例:

http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    // Examine incoming parameters
    if !ok {
        w.Header().Set("Content-Type", "application/json")
        w.WriteHeader(http.StatusBadRequest)
        str := `{"Result":"","Error":"No valid Var"}`
        fmt.Fprint(w, str)
        return // Terminate the request
    }

    // Continue normal API serving
})
ログイン後にコピー

エラーの伝播:

外部でエラーが発生した場合ServeHTTP() の場合、ServeHTTP() がサービスを終了できるように、そのエラー状態を返す必要があります。 request.

例:

type params struct {
    // Field definitions for your parameters
}

func decodeParams(r *http.Request) (*params, error) {
    p := new(params)
    // Decode parameters
    if !ok {
        return nil, errors.New("Invalid params")
    }
    return p, nil
}

http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    p, err := decodeParams(r)
    if err != nil {
        http.Error(w, `Invalid input params!`, http.StatusBadRequest)
        return // Terminate the request
    }

    // Continue normal API serving
})
ログイン後にコピー

以上がGo で HTTP リクエストを効果的に終了するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート