Bei der Arbeit mit Netzwerkanwendungen in Go bietet die Methode net.Conn.Read eine bequeme Möglichkeit um Daten von einer Verbindung zu empfangen. Es funktioniert jedoch, indem es in ein vorab festgelegtes Byte-Array einliest, was den Entwickler vor die Herausforderung stellt, die genaue Datenlänge vorherzusagen.
Angabe einer festen -Längen-Byte-Arrays wie make([]byte, 2048) können zu zwei Möglichkeiten führen Probleme:
Um diese Einschränkungen zu überwinden, können wir die Funktion io.Copy nutzen, die einen robusten und effizienten Ansatz für die Datenübertragung zwischen zwei bietet io-kompatible Verbindungen. Indem wir ein bytes.Buffer-Objekt erstellen und die Daten von net.Conn dorthin weiterleiten, können wir den Puffer nach Bedarf dynamisch erweitern und so sicherstellen, dass die genaue Datenmenge erfasst wird.
Hier ist ein Beispiel-Codeausschnitt, der zeigt, wie man io.Copy zum genauen Lesen von Daten verwendet:
package main import ( "bytes" "fmt" "io" "net" ) func main() { conn, err := net.Dial("tcp", "google.com:80") if err != nil { fmt.Println("dial error:", err) return } defer conn.Close() fmt.Fprintf(conn, "GET / HTTP/1.0\r\n\r\n") var buf bytes.Buffer io.Copy(&buf, conn) fmt.Println("total size:", buf.Len()) }
In diesem Beispiel haben wir Initiieren Sie eine TCP-Verbindung zum Google-Webserver, senden Sie eine HTTP-Anfrage und erfassen Sie die Antwortdaten dynamisch mithilfe von bytes.Buffer und io.Copy. Das resultierende Buf-Objekt enthält die vollständige Antwort und stellt so sicher, dass wir die genaue Menge der übertragenen Daten lesen.
Durch die Nutzung dieses Ansatzes können Sie zuverlässig Daten von Netzwerkverbindungen empfangen, ohne die Einschränkungen, die durch vordefinierte Byte-Arrays auferlegt werden.
Das obige ist der detaillierte Inhalt vonWie kann ich mit Golang die genaue Datenmenge aus einem net.Conn auslesen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!