Rumah > pembangunan bahagian belakang > Golang > [Ringkasan] Beberapa perpustakaan permintaan bahasa Go yang biasa

[Ringkasan] Beberapa perpustakaan permintaan bahasa Go yang biasa

PHPz
Lepaskan: 2023-04-25 16:55:15
asal
1727 orang telah melayarinya

Dengan perkembangan teknologi Internet yang berterusan, permintaan untuk permintaan rangkaian juga semakin meningkat. Dalam pembangunan web, kami sering menggunakan perpustakaan permintaan rangkaian untuk merealisasikan interaksi antara klien dan pelayan. Bahasa Go ialah bahasa yang cekap, ringkas dan serentak, jadi ia juga membawa kita banyak pilihan yang sangat baik dari segi permintaan rangkaian. Artikel ini akan memperkenalkan beberapa perpustakaan permintaan bahasa Go yang biasa, dan membandingkan serta menganalisis kelebihan dan kekurangannya untuk membantu anda memilih pustaka yang sesuai dengan lebih baik.

  1. net/http

net/http ialah pustaka klien HTTP yang disediakan dalam pustaka standard bahasa Go Ia menyokong HTTP/1.0, HTTP/1.1 dan HTTP/ 2 perjanjian. Kod klien HTTP boleh ditulis dengan mudah menggunakan net/http dan menyokong kuki, pemampatan gzip, TLS, proksi, kumpulan sambungan dan fungsi lain. Berikut ialah contoh penggunaan mudah:

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)
}
Salin selepas log masuk

Kod ini melaksanakan permintaan HTTP GET yang mudah dan mengeluarkan kod status yang dikembalikan oleh permintaan tersebut. Sudah tentu, net/http juga menyokong lebih banyak kaedah HTTP, seperti POST, PUT, HEAD, dll., serta lebih banyak operasi permintaan dan tindak balas.

Selain operasi permintaan dan tindak balas asas, net/http juga menyediakan CookieJar, Pengangkutan, Pelanggan dan komponen lain, membolehkan kami mengendalikan permintaan HTTP dengan lebih fleksibel. Antaranya, CookieJar boleh memproses kuki secara automatik, supaya kami tidak perlu memproses kuki secara manual; Pengangkutan boleh menentukan saiz kumpulan sambungan, menyokong penggunaan semula sambungan HTTP, dan mengurangkan kelewatan sambungan, seperti tamat masa permintaan, pengepala tersuai; , dsb.

Walau bagaimanapun, berbanding perpustakaan permintaan lain, net/http mempunyai beberapa had. Contohnya, ia tidak menyokong pemprosesan ubah hala tersuai, kaedah penyimpanan tersuai kuki, dsb. Selain itu, apabila menggunakan net/http untuk mengendalikan permintaan HTTPS, anda perlu menetapkan konfigurasi TLS secara manual dan konfigurasi TLS agak menyusahkan.

  1. grequests

grequests ialah pustaka klien HTTP ringan berdasarkan enkapsulasi net/http, yang menyediakan antara muka API yang lebih baik dan prestasi yang lebih baik. grequests menyokong kaedah HTTP konvensional, seperti GET, POST, PUT, PATCH, DELETE, dll., dan menyokong permintaan tak segerak dan permintaan kelompok. Berikut ialah contoh penggunaan grequests untuk membuat permintaan tak segerak:

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("=================")
    }
}
Salin selepas log masuk

Kod ini melaksanakan dua permintaan GET tak segerak dan mengeluarkan hasil permintaan. Seperti yang anda lihat, program ini tidak menyekat sebelum permintaan selesai, tetapi terus melaksanakan baris kod seterusnya. Hanya selepas permintaan selesai, program mengeluarkan hasilnya.

Walaupun grequests lebih fleksibel dan lebih mudah digunakan daripada net/http, ia juga mempunyai beberapa had. Contohnya, ia tidak menyokong fungsi pengumpulan sambungan HTTP dan penggunaan semula sambungan, dan kaedah pemprosesan tindak balasnya agak mudah dan tidak menyokong operasi tindak balas yang lebih maju.

  1. resty

resty ialah perpustakaan klien HTTP yang memberi lebih perhatian kepada fleksibiliti dan kemudahan penggunaan Ia menyediakan antara muka API seperti jQuery dan menyokong kaedah HTTP yang mudah. , tamat masa, cuba semula automatik dan fungsi lain. resty menyokong sintaks rantaian, yang boleh menggabungkan permintaan HTTP dengan mudah Ia juga menyokong pemampatan gzip, penghuraian tindak balas automatik dan fungsi lain. Berikut ialah contoh menggunakan 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())
}
Salin selepas log masuk

Kod ini menggunakan resty untuk membuat permintaan HTTP GET yang mudah dan mengeluarkan kod status yang dikembalikan oleh permintaan tersebut. Seperti yang anda lihat, menggunakan resty adalah lebih mudah daripada menggunakan net/http, dan ia juga menyokong lebih banyak fungsi.

Walau bagaimanapun, resty, sebagai perpustakaan permintaan yang berkuasa, juga mempunyai beberapa masalahnya sendiri. Contohnya, ia tidak menyokong permintaan tak segerak dan mempunyai beberapa isu prestasi penyahpepijatan.

  1. go-http-client

go-http-client ialah pustaka klien HTTP yang cekap, mudah digunakan dan berskala berdasarkan net/http. Ia menyokong sintaks rantaian seperti resty, dan juga menyokong kaedah HTTP, pengepala, kuki, tamat masa, kumpulan sambungan dan fungsi lain. Pada masa yang sama, ia juga menyokong kaedah pemprosesan permintaan dan tindak balas yang kaya, seperti pengekodan dan penyahkodan, cuba semula, pengalihan semula, pengendalian ralat tersuai dan fungsi lain dalam JSON, XML, FormData dan format lain. Berikut ialah contoh menggunakan 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())
}
Salin selepas log masuk

Kod ini menggunakan go-http-client untuk membuat permintaan HTTP GET yang mudah dan mengeluarkan kod status dan data respons yang dikembalikan oleh permintaan tersebut. Seperti yang anda lihat, go-http-client ialah perpustakaan permintaan yang sangat mudah digunakan, fleksibel dan kaya dengan ciri.

Ringkasan

Pilihan perpustakaan permintaan bahasa Go terutamanya perlu diputuskan berdasarkan keperluan sebenar. Jika anda hanya melaksanakan permintaan HTTP yang mudah, maka net/http sudah memadai jika anda perlu melaksanakan permintaan asynchronous atau permintaan batch, maka grequests boleh dipertimbangkan jika anda memerlukan fungsi yang lebih maju atau kemudahan penggunaan yang lebih baik, kemudian resty atau go- http -pelanggan boleh digunakan sebagai pilihan yang lebih baik. Pada masa yang sama, anda juga boleh memutuskan perpustakaan mana yang hendak digunakan berdasarkan keutamaan peribadi dan keperluan projek.

Atas ialah kandungan terperinci [Ringkasan] Beberapa perpustakaan permintaan bahasa Go yang biasa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan