[概要] いくつかの一般的な Go 言語リクエスト ライブラリ

PHPz
リリース: 2023-04-25 16:55:15
オリジナル
1554 人が閲覧しました

インターネット技術の継続的な発展に伴い、ネットワークリクエストの需要も増加しています。 Web 開発では、クライアントとサーバー間の対話を実現するためにネットワーク リクエスト ライブラリをよく使用します。 Go 言語は効率的で簡潔な同時実行言語であるため、ネットワーク リクエストに関しても優れた選択肢が数多くあります。この記事では、いくつかの一般的な Go 言語リクエスト ライブラリを紹介し、適切なライブラリをより適切に選択できるように、それらの長所と短所を比較および分析します。

  1. net/http

net/http は、Go 言語の標準ライブラリで提供される HTTP クライアント ライブラリで、HTTP/1.0、HTTP/1.1、HTTP/2 をサポートしています。合意。 HTTP クライアント コードは net/http を使用して簡単に作成でき、Cookie、gzip 圧縮、TLS、プロキシ、接続プール、その他の機能をサポートします。次に簡単な使用例を示します。

package main

import (
    "fmt"
    "net/http"
)

func main() {
    resp, err := http.Get("http://example.com/")
    if err != nil {
        fmt.Println("error:", err)
        return
    }
    defer resp.Body.Close()
    fmt.Println(resp.Status)
}
ログイン後にコピー

このコードは、単純な HTTP GET リクエストを実装し、リクエストによって返されるステータス コードを出力します。もちろん、net/http は、POST、PUT、HEAD などのより多くの HTTP メソッドや、より多くのリクエストおよびレスポンス操作もサポートしています。

基本的なリクエストとレスポンスの操作に加えて、net/http は CookieJar、トランスポート、クライアント、その他のコンポーネントも提供し、HTTP リクエストをより柔軟に処理できるようにします。その中で、CookieJar は Cookie を自動的に処理できるため、手動で Cookie を処理する必要はありません; Transport は接続プール サイズを指定し、HTTP 接続の再利用をサポートし、接続遅延を削減できます; Client はリクエスト タイムアウト、カスタム ヘッダーなどの高度な操作を提供します、など。

ただし、他のリクエスト ライブラリと比較すると、net/http にはいくつかの制限があります。たとえば、カスタム リダイレクト処理、Cookie のカスタム保存方法などはサポートされていません。さらに、net/http を使用して HTTPS リクエストを処理する場合は、TLS 構成を手動で設定する必要があり、TLS 構成は比較的面倒です。

  1. grequests

grequests は、net/http カプセル化に基づく軽量の HTTP クライアント ライブラリであり、より優れた API インターフェイスとパフォーマンスを提供します。 grequests は、GET、POST、PUT、PATCH、DELETE などの従来の HTTP メソッドをサポートし、非同期リクエストとバッチ リクエストをサポートします。以下は、grequests を使用して非同期リクエストを行う例です。

package main

import (
    "fmt"
    "github.com/levigross/grequests"
)

func main() {
    urls := []string{
        "http://httpbin.org/get?show_env=1",
        "http://httpbin.org/get",
    }
    rs := make([]*grequests.Response, len(urls))
    for i, url := range urls {
        rs[i], _ = grequests.AsyncGet(url, nil)
    }
    for _, r := range rs {
        fmt.Println(r.String())
        fmt.Println("=================")
    }
}
ログイン後にコピー

このコードは 2 つの非同期 GET リクエストを実装し、リクエストの結果を出力します。ご覧のとおり、プログラムはリクエストが完了する前にブロックされず、コードの次の行の実行を続けます。リクエストが完了した後でのみ、プログラムは結果を出力します。

grequests は net/http よりも柔軟で使いやすいですが、いくつかの制限もあります。たとえば、HTTP 接続プーリングや接続再利用機能はサポートされておらず、応答処理方法は比較的単純で、より高度な応答操作はサポートされていません。

  1. resty

resty は、柔軟性と使いやすさに重点を置いた HTTP クライアント ライブラリであり、jQuery のような API インターフェイスを提供し、シンプルな HTTP メソッドをサポートしています。 、タイムアウト、自動リトライおよびその他の機能。 resty は、HTTP リクエストを簡単に結合できるチェーン構文をサポートしており、gzip 圧縮、自動応答解析などの機能もサポートしています。次に、resty の使用例を示します。

package main

import (
    "fmt"
    "github.com/go-resty/resty/v2"
)

func main() {
    resp, err := resty.New().
        SetTimeout(5*time.Second).
        R().
        Get("http://example.com/")
    if err != nil {
        fmt.Println("error:", err)
        return
    }
    fmt.Println(resp.Status())
}
ログイン後にコピー

このコードは、resty を使用して単純な HTTP GET リクエストを作成し、リクエストによって返されたステータス コードを出力します。ご覧のとおり、resty の使用は net/http を使用するよりもはるかに簡単で、より多くの機能もサポートしています。

ただし、resty は強力なリクエスト ライブラリですが、独自の問題もいくつか抱えています。たとえば、非同期リクエストはサポートされておらず、デバッグのパフォーマンス上の問題がいくつかあります。

  1. go-http-client

go-http-client は、net/http に基づく、効率的で使いやすく、スケーラブルな HTTP クライアント ライブラリです。 Resty のようなチェーン構文をサポートし、HTTP メソッド、ヘッダー、Cookie、タイムアウト、接続プール、その他の機能もサポートします。同時に、エンコードとデコード、再試行、リダイレクト、カスタム エラー処理、JSON、XML、FormData、その他の形式でのその他の機能など、豊富なリクエストと応答の処理メソッドもサポートしています。以下は go-http-client の使用例です。

package main

import (
    "fmt"
    "github.com/cosiner/flag"
    "github.com/cosiner/go-http-client"
)

func main() {
    client := http.NewClient(nil)
    resp, err := client.Get("http://example.com/", nil)
    if err != nil {
        fmt.Println("error:", err)
        return
    }
    fmt.Println(resp.StatusCode(), resp.String())
}
ログイン後にコピー

このコードは go-http-client を使用して単純な HTTP GET リクエストを作成し、リクエストによって返されるステータス コードと応答データを出力します。ご覧のとおり、 go-http-client は非常に使いやすく、柔軟で機能が豊富なリクエスト ライブラリです。

概要

Go 言語リクエスト ライブラリの選択は、主に実際のニーズに基づいて決定する必要があります。単純な HTTP リクエストを実装するだけの場合は net/http で十分です。非同期リクエストやバッチ リクエストを実装する必要がある場合は grequests を検討できます。さらに高度な機能や使いやすさが必要な場合は、resty または go-http を検討してください。 -client をより良い選択肢として使用できます。同時に、個人の好みやプロジェクトのニーズに基づいて、どのライブラリを使用するかを決定することもできます。

以上が[概要] いくつかの一般的な Go 言語リクエスト ライブラリの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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