Frageninhalt
Ich versuche, eine HTTP-GET-Anfrage in Go zu stellen, indem ich das Paket net/http
verwende, um meine öffentliche IP-Adresse mithilfe des Dienstes api.ipify.org abzurufen. Ich habe den Fehler erst erhalten, nachdem ich die App erstellt habe mit:
CGO_ENABLED=0 GOOS=linux go build -a -ldflags "-s -w" -o ip get.go
Allerdings ist mir aufgefallen, dass der Code sehr gut läuft, wenn ich den folgenden Befehl verwende:
go build get.go
go run get.go
Das ist der Code, den ich verwende:
package main import ( "fmt" "io/ioutil" "net/http" ) func get() { resp, err := http.Get("https://api.ipify.org") if err == nil { defer resp.Body.Close() bodyBytes, _ := ioutil.ReadAll(resp.Body) body := string(bodyBytes) fmt.Println(body) } else { fmt.Println(err) } } func main() { get() }
Was mich verwirrt, ist, warum der Code mit go build
和 go run
funktioniert, aber fehlschlägt, wenn ich komplexere Build-Befehle verwende. Kann mir jemand helfen, die Ursache dieses Problems zu verstehen und wie ich es beheben kann? Vielen Dank für Ihre Zeit und Hilfe!
Wenn CGO verfügbar ist, wird ein CGO-basierter Parser verwendet. Es verwendet verschiedene Mittel, um Domänen aufzulösen, die /etc/resolv.conf oder /etc/nsswitch.conf usw. lesen. Diese Funktionen werden vom Go-basierten DNS-Resolver nicht implementiert, was dazu führt, dass die Domäne nicht aufgelöst werden kann und die HTTP-Anfrage fehlschlägt.
Das obige ist der detaillierte Inhalt vonFehler beim Erstellen einer HTTP-GET-Anfrage in Go: „dial tcp:lookup api.ipify.org on:53:read udp:50975->:53:read:connectionrejected'. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!