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
Auch in der Bibliothek
Timber für Kotlin: Vollständige Anleitung mit Beispielen
Arbeiten mit Kafka in TypeScript: Die Bibliothek KafkaJS für Node.js
Elasticsearch-Client für Go (Golang): Vollständiger Leitfaden