HTTP-Client für Go (Golang): Top-Bibliotheken für die Arbeit mit HTTP

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

HTTP-Client für Go (Golang): Überblick und Vergleich der besten Bibliotheken



Go (Golang) ist eine der beliebtesten Sprachen für die Erstellung hochlastiger Webdienste, Microservices und API-Integrationen. Die Arbeit mit HTTP-Anfragen ist eine grundlegende Aufgabe praktisch jedes Backends. In der Standardbibliothek von Go gibt es bereits das leistungsstarke Paket net/http, aber für komplexe Szenarien (automatische Wiederholungen, Verbindungspools, bequeme fluent-Schnittstelle) wurden spezialisierte Bibliotheken entwickelt. In diesem Artikel analysieren wir die Top-HTTP-Clients für Go: ihre Besonderheiten, Leistung und Anwendungsbeispiele.



1. Standard net/http — die Grundlage



Das Paket net/http ist in Go integriert und erfordert keine Installation. Es deckt die grundlegenden Anforderungen vollständig ab: Senden von GET/POST-Anfragen, Arbeiten mit Headern, Cookies, Timeouts. Für fortgeschrittene Nutzung (z. B. Verbindungspool mit Einstellungen) ist jedoch eine manuelle Konfiguration von http.Transport erforderlich.



package main

import ( "fmt" "io" "net/http" "time")

func main() { client := &http.Client{ Timeout: 10 * time.Second, Transport: &http.Transport{ MaxIdleConns: 100, IdleConnTimeout: 90 * time.Second, DisableCompression: false, }, }

resp, err := client.Get("https://api.github.com") if err != nil { panic(err) } defer resp.Body.Close()

body, _ := io.ReadAll(resp.Body) fmt.Println("Status:", resp.StatusCode) fmt.Println("Body length:", len(body))}


Vorteile: keine Abhängigkeiten, vollständige Kontrolle, Unterstützung für HTTP/2, integrierte Middleware durch RoundTripper-Wrapper.

Nachteile: ausführlicher Code für einfache Anfragen, keine fluent-Schnittstelle, schwierige Konfiguration von Wiederholungen und JSON-Deserialisierung.



2. resty — einfacher und eleganter REST-Client



Die Bibliothek resty (Installation: go get github.com/go-resty/resty/v2) ist einer der beliebtesten HTTP-Clients in Go. Bietet eine fluent-Schnittstelle, automatische JSON/XML-Deserialisierung, bequeme Methodenverkettung.



package main

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

type User struct { ID int `json:"id"` Name string `json:"name"`}

func main() { client := resty.New() client.SetBaseURL("https://jsonplaceholder.typicode.com")

var users []User resp, err := client.R(). SetResult(&users). Get("/users")

if err != nil { panic(err) }

fmt.Println("Status:", resp.StatusCode()) fmt.Println("First user:", users[0].Name)}


Vorteile: prägnante Syntax, integrierte Unterstützung für Wiederholungen, Timeouts, Proxy, automatische Fehlerbehandlung, Arbeit mit multipart/form-data.

Nachteile: etwas langsamer als net/http bei hoher Last (aufgrund von Abstraktionen), unterstützt kein HTTP/3.



3. grequests — Go-Version des beliebten Python-Clients



grequests (Installation: go get github.com/levigross/grequests) ist von Python Requests inspiriert. Bietet eine einfache API für GET, POST, PUT, DELETE, unterstützt Sitzungen, Cookies, automatische JSON-Verarbeitung.



package main

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

func main() { resp, err := grequests.Get("https://httpbin.org/get", &grequests.RequestOptions{ Headers: map[string]string{"Accept": "application/json"}, }) if err != nil { panic(err) }

var data map[string]interface{} resp.JSON(&data) fmt.Println("URL:", data["url"])}


Vorteile: minimalistischer Code, bequeme Arbeit mit JSON, Unterstützung für Datei-Uploads.

Nachteile: Projekt

Empfehlungen