Maison > développement back-end > Golang > Comment utiliser le langage Go pour implémenter la fonction de transfert de données

Comment utiliser le langage Go pour implémenter la fonction de transfert de données

PHPz
Libérer: 2023-04-13 09:47:10
original
957 Les gens l'ont consulté

Dans les systèmes logiciels modernes, nous avons souvent besoin de partager des données entre différents composants. La transmission de données peut être réalisée de différentes manières, par exemple en utilisant des files d'attente de messages, des frameworks RPC ou des API REST. Dans cet article, nous présenterons comment utiliser le langage Go pour implémenter des fonctions de transfert de données afin de partager des données entre différents composants.

Tout d'abord, nous devons considérer le format de l'entité de données. Dans de nombreux cas, il est plus pratique d’utiliser le format JSON. Il existe une bibliothèque standard « encoding/json » dans le langage Go qui peut fournir des fonctions d'encodage et de décodage JSON. Nous pouvons l'utiliser pour sérialiser nos données au format JSON et les envoyer au composant cible.

Ensuite, nous devons choisir un protocole réseau approprié pour mettre en œuvre la transmission de données. Les protocoles couramment utilisés incluent TCP, UDP et HTTP. Ici, nous utiliserons le protocole UDP. UDP a une surcharge inférieure et une vitesse de transmission plus rapide que TCP. Cependant, elle ne garantit pas la fiabilité des données et nous oblige à mettre nous-mêmes en œuvre un mécanisme de retransmission pour garantir l’intégrité des données.

Dans notre code, nous devons implémenter deux composants : l'expéditeur et le destinataire. L'expéditeur est responsable de la transmission des données au destinataire, et le destinataire traite les données reçues et répond en conséquence. Voici un exemple de code simple :

package main

import (
    "encoding/json"
    "fmt"
    "net"
)

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

func main() {
    sendAddr, err := net.ResolveUDPAddr("udp", "127.0.0.1:8000")
    if err != nil {
        fmt.Printf("Error resolving UDP address: %s\n", err.Error())
        return
    }

    conn, err := net.DialUDP("udp", nil, sendAddr)
    if err != nil {
        fmt.Printf("Error dialing UDP: %s\n", err.Error())
        return
    }

    defer conn.Close()

    data := &Data{
        ID:   1,
        Name: "Alice",
    }

    dataBytes, err := json.Marshal(data)
    if err != nil {
        fmt.Printf("Error marshalling JSON data: %s\n", err.Error())
        return
    }

    _, err = conn.Write(dataBytes)
    if err != nil {
        fmt.Printf("Error writing UDP data: %s\n", err.Error())
        return
    }
}
Copier après la connexion

Dans l'exemple de code ci-dessus, nous utilisons la fonction DialUDP du package net pour envoyer des paquets UDP à l'adresse de destination spécifiée. Nous devons d'abord analyser l'adresse donnée dans une variable de type net.UDPAdr, qui contient l'adresse et le numéro de port. Ensuite, nous créons une connexion UDP à l'aide de la fonction DialUDP, qui renvoie une variable de type net.UDPConn. Nous pouvons l'utiliser pour envoyer des paquets.

Derrière le code, nous créons une structure de type Data, qui contient deux champs : ID et Nom. Nous utilisons ensuite la fonction json.Marshal pour sérialiser la valeur du type de données dans un tableau d'octets JSON. Enfin, nous utilisons la méthode Write de la connexion UDP pour envoyer le tableau d'octets à l'adresse de destination.

Ensuite, jetons un coup d'œil à l'exemple de code côté récepteur :

package main

import (
    "encoding/json"
    "fmt"
    "net"
)

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

func main() {
    receiveAddr, err := net.ResolveUDPAddr("udp", ":8000")
    if err != nil {
        fmt.Printf("Error resolving UDP address: %s\n", err.Error())
        return
    }

    conn, err := net.ListenUDP("udp", receiveAddr)
    if err != nil {
        fmt.Printf("Error listening UDP: %s\n", err.Error())
        return
    }

    defer conn.Close()

    buf := make([]byte, 1024)

    for {
        n, _, err := conn.ReadFromUDP(buf)
        if err != nil {
            fmt.Printf("Error reading UDP data: %s\n", err.Error())
            continue
        }

        data := &Data{}
        err = json.Unmarshal(buf[:n], data)
        if err != nil {
            fmt.Printf("Error unmarshalling JSON data: %s\n", err.Error())
            continue
        }

        fmt.Printf("Received data: ID=%d, Name=%s\n", data.ID, data.Name)
    }
}
Copier après la connexion

Dans l'exemple de code ci-dessus, nous avons utilisé la fonction ListenUDP du package net pour écouter le port UDP. Comme pour le code de l'expéditeur, nous devons d'abord analyser l'adresse de réception dans une variable de type net.UDPAdr. Ensuite, nous créons un écouteur UDP à l'aide de la fonction ListenUDP, qui renvoie une variable de type net.UDPConn. Nous pouvons l'utiliser pour recevoir des paquets UDP.

Plus tard dans le code, nous créons un tampon buf et utilisons la fonction ReadFromUDP pour lire les paquets de la connexion UDP. La fonction ReadFromUDP renvoie le nombre d'octets reçus et une variable de type *net.UDPAdr d'où provient le paquet. Enfin, nous utilisons la fonction json.Unmarshal pour désérialiser le tableau d'octets JSON reçu en une valeur de type Data et afficher les champs ID et Name.

À ce stade, nous avons mis en œuvre avec succès une fonction simple de transfert de données qui peut transmettre des données entre plusieurs processus ou machines. Si vous souhaitez étendre le code pour gérer des types de données plus complexes ou une transmission de données plus stable, vous devrez peut-être impliquer davantage de connaissances en conception de logiciels et en programmation réseau. Cependant, cet exemple de code simple peut constituer un bon point de départ pour vous aider à mieux comprendre la programmation réseau de Go et les capacités d'encodage et de décodage JSON.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal