Cara menggunakan bahasa Go untuk melaksanakan fungsi pemajuan data

PHPz
Lepaskan: 2023-04-13 09:47:10
asal
837 orang telah melayarinya

Dalam sistem perisian moden, kita selalunya perlu berkongsi data antara komponen yang berbeza. Penghantaran data boleh dicapai dalam pelbagai cara, seperti menggunakan baris gilir mesej, rangka kerja RPC atau REST API. Dalam artikel ini, kami akan memperkenalkan cara menggunakan bahasa Go untuk melaksanakan fungsi pemajuan data untuk berkongsi data antara komponen yang berbeza.

Pertama, kita perlu mempertimbangkan format entiti data. Dalam banyak kes, adalah paling mudah untuk menggunakan format JSON. Terdapat perpustakaan standard "pengekodan/json" dalam bahasa Go yang boleh menyediakan fungsi pengekodan dan penyahkodan JSON. Kami boleh menggunakan ini untuk mensiri data kami ke dalam format JSON dan menghantarnya ke komponen sasaran.

Seterusnya, kita perlu memilih protokol rangkaian yang sesuai untuk melaksanakan penghantaran data. Protokol yang biasa digunakan termasuk TCP, UDP dan HTTP. Di sini kita akan menggunakan protokol UDP. UDP mempunyai overhed yang lebih kecil dan kelajuan penghantaran lebih cepat daripada TCP. Walau bagaimanapun, ia tidak menjamin kebolehpercayaan data dan memerlukan kami melaksanakan sendiri mekanisme penghantaran semula untuk memastikan integriti data.

Dalam kod kami, kami perlu melaksanakan dua komponen: penghantar dan penerima. Pengirim bertanggungjawab untuk memajukan data kepada penerima, dan penerima memproses data yang diterima dan bertindak balas dengan sewajarnya. Berikut ialah kod sampel mudah:

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
    }
}
Salin selepas log masuk

Dalam kod sampel di atas, kami menggunakan fungsi DialUDP dalam pakej bersih untuk menghantar paket UDP ke alamat destinasi yang ditentukan. Mula-mula kita perlu menghuraikan alamat yang diberikan kepada pembolehubah jenis net.UDPAddr, yang mengandungi alamat dan nombor port. Kemudian, kami mencipta sambungan UDP menggunakan fungsi DialUDP, yang mengembalikan pembolehubah jenis net.UDPConn. Kita boleh menggunakannya untuk menghantar paket.

Kemudian dalam kod, kami mencipta struktur jenis Data, yang mengandungi dua medan: ID dan Nama. Kami kemudian menggunakan fungsi json.Marshal untuk menyerikan nilai jenis Data ke dalam tatasusunan bait JSON. Akhir sekali, kami menggunakan kaedah Tulis sambungan UDP untuk menghantar tatasusunan bait ke alamat destinasi.

Seterusnya, mari kita lihat contoh kod di bahagian penerima:

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)
    }
}
Salin selepas log masuk

Dalam kod contoh di atas, kami menggunakan fungsi ListenUDP dalam pakej bersih untuk mendengar UDP pelabuhan. Seperti kod penghantar, kita perlu terlebih dahulu menghuraikan alamat penerima kepada pembolehubah jenis net.UDPAddr. Kemudian, kami mencipta pendengar UDP menggunakan fungsi ListenUDP, yang mengembalikan pembolehubah jenis net.UDPConn. Kita boleh menggunakannya untuk menerima paket UDP.

Kemudian dalam kod, kami mencipta buf buffer dan menggunakan fungsi ReadFromUDP untuk membaca paket daripada sambungan UDP. Fungsi ReadFromUDP mengembalikan bilangan bait yang diterima dan pembolehubah jenis *net.UDPAddr dari mana paket itu berasal. Akhir sekali, kami menggunakan fungsi json.Unmarshal untuk menyahsiri tatasusunan bait JSON yang diterima menjadi nilai jenis Data dan mengeluarkan medan ID dan Nama.

Pada ketika ini, kami telah berjaya melaksanakan fungsi pemajuan data mudah yang boleh menghantar data antara berbilang proses atau mesin. Jika anda ingin melanjutkan kod untuk mengendalikan jenis data yang lebih kompleks atau penghantaran data yang lebih stabil, anda mungkin perlu melibatkan lebih banyak pengetahuan reka bentuk perisian dan pengaturcaraan rangkaian. Walau bagaimanapun, kod sampel mudah ini boleh berfungsi sebagai titik permulaan yang baik untuk membantu anda memperoleh pemahaman yang lebih mendalam tentang pengaturcaraan rangkaian Go dan keupayaan pengekodan dan penyahkodan JSON.

Atas ialah kandungan terperinci Cara menggunakan bahasa Go untuk melaksanakan fungsi pemajuan data. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!