Maison >développement back-end >Golang >Comment puis-je lire la quantité exacte de données d'un net.Conn à l'aide de Golang ?
Lorsque vous travaillez avec des applications réseau dans Go, la méthode net.Conn.Read offre un moyen pratique pour recevoir des données d’une connexion. Cependant, il fonctionne en lisant dans un tableau d'octets prédéterminé, laissant au développeur le défi d'anticiper la longueur exacte des données.
Spécifier un nombre fixe un tableau d'octets de longueur, tel que make([]byte, 2048), peut conduire à deux potentiels problèmes :
Pour surmonter ces limitations, nous pouvons utiliser la fonction io.Copy, qui fournit une approche robuste et efficace pour transférer des données entre deux Connexions compatibles io. En créant un objet bytes.Buffer et en y acheminant les données de net.Conn, nous pouvons étendre dynamiquement le tampon si nécessaire, garantissant ainsi que la quantité exacte de données est capturée.
Voici un exemple d'extrait de code qui montre comment utiliser io.Copy pour une lecture précise des données :
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()) }
Dans cet exemple, nous initiez une connexion TCP au serveur Web de Google, envoyez une requête HTTP et capturez dynamiquement les données de réponse à l'aide de bytes.Buffer et io.Copy. L'objet buf résultant contiendra la réponse complète, garantissant que nous lisons la quantité exacte de données transférées.
En tirant parti de cette approche, vous pouvez recevoir de manière fiable des données à partir de connexions réseau sans les limitations imposées par les tableaux d'octets prédéfinis.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!