Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara membina protobuf melalui golang

Cara membina protobuf melalui golang

PHPz
PHPzasal
2023-04-25 10:48:451470semak imbas

Dengan perkembangan teknologi Internet, semakin ramai pengaturcara baru meminati bahasa golang. Sebagai bahasa pengaturcaraan yang baru muncul, golang semakin digunakan oleh pengaturcara. Kemahiran dalam bahasa golang boleh membantu pengaturcara membangunkan aplikasi berkualiti tinggi dengan cepat, dengan itu meningkatkan kecekapan kerja mereka. Dalam artikel ini, kita akan meneroka cara membina protobuf melalui golang.

1. Pengenalan kepada protobuf

Protobuf, nama penuh Protocol Buffers, ialah protokol yang menerangkan format data, penyimpanan data dan pertukaran data, serta menyediakan perpustakaan antara muka untuk bahasa pengaturcaraan yang berbeza. protobuf boleh menyerikan data berstruktur, memampatkan ruang storan dengan berkesan, dan mempunyai kebolehskalaan yang baik, menjadikannya sangat sesuai untuk digunakan pada pelbagai sistem teragih.

2. Pasang protobuf

Untuk menggunakan protobuf, kita perlu memasang protobuf pada sistem terlebih dahulu. Di bawah, kami akan memperkenalkan cara memasang protobuf pada sistem Linux.

  1. Pasang perpustakaan bergantung

Sebelum memasang protobuf, anda perlu memasang beberapa perpustakaan bergantung. Kita boleh menggunakan arahan berikut untuk memasang perpustakaan bergantung:

sudo apt-get update

sudo apt-get install autoconf automake libtool curl make g++ unzip
  1. Muat turun kod sumber protobuf

Kita boleh pergi ke laman web rasmi protobuf untuk memuat turun protobuf pakej kod sumber: https:// github.com/protocolbuffers/protobuf/releases. Pilih versi yang sesuai untuk sistem pengendalian semasa anda, dan selepas memuat turun, ekstraknya ke laluan yang ditentukan.

  1. Kompilasi protobuf

Laksanakan arahan berikut dalam direktori sumber protobuf yang dinyahmampat:

./autogen.sh
./configure
make
make check
sudo make install
sudo ldconfig

Jika langkah di atas berjaya dilaksanakan, maka protobuf telah berjaya dipasang.

3. Gunakan protobuf

Selepas memasang protobuf, kita boleh mula menggunakan protobuf. Berikut ialah contoh mudah langkah untuk menggunakan protobuf melalui golang:

  1. Tentukan struktur data

Kita perlu mentakrifkan struktur data dalam fail .gproto. Sebagai contoh, kami mentakrifkan struktur data Pekerja, yang ditakrifkan seperti berikut:

syntax = "proto3";

package myproto;

message Employee {
  string name = 1;
  int32 id = 2;
  string email = 3;
}

Kod di atas mentakrifkan struktur data bernama Pekerja, yang merangkumi tiga medan: nama, id dan e-mel. Setiap medan mempunyai nombor pengenalan unik yang digunakan untuk komunikasi antara pelaksanaan yang berbeza.

  1. Jana fail golang

Selepas menentukan struktur data, kita perlu menggunakan pengkompil protobuf untuk menukarnya kepada kod golang. Gunakan arahan berikut untuk menjana fail golang:

protoc --go_out=. employee.proto

di mana employee.proto ialah fail struktur data yang ditentukan dan pilihan --go_out menunjukkan penjanaan kod golang. Perintah ini akan menjana fail employee.pb.go dalam direktori yang sama.

  1. Menggunakan kod golang

Selepas menjana kod golang, kita boleh menggunakannya dalam golang. Berikut ialah program sampel yang mencipta objek Pekerja, mensirikannya, dan kemudian menyahsirinya.

package main

import (
    "bytes"
    "fmt"
    "myproto"
    "strconv"

    "github.com/golang/protobuf/proto"
)

func main() {
    // 创建一个Employee对象
    employee := &myproto.Employee{
        Name: "张三",
        Id:   10001,
        Email: "zhangsan@qq.com",
    }
    fmt.Println("Employee对象:", employee)

    // 将Employee对象序列化为二进制数据
    data, err := proto.Marshal(employee)
    if err != nil {
        fmt.Println("序列化失败:", err)
        return
    }
    fmt.Println("序列化后的二进制数据:", data)

    // 将二进制数据反序列化为Employee对象
    newEmployee := &myproto.Employee{}
    err = proto.Unmarshal(data, newEmployee)
    if err != nil {
        fmt.Println("反序列化失败:", err)
        return
    }
    fmt.Println("反序列化后的Employee对象:", newEmployee)

    // 检查序列化和反序列化是否成功
    if newEmployee.Name != employee.Name ||
        newEmployee.Id != employee.Id ||
        newEmployee.Email != employee.Email {
        fmt.Println("反序列化结果与原始对象不一致!")
        return
    }
    fmt.Println("序列化和反序列化成功!")
}

Dalam kod di atas, kami menggunakan kaedah proto.Marshal dan proto.Unmarshal yang disediakan oleh protobuf untuk mensiri dan menyahsiri objek Pekerja. Jika program ini berjaya dilaksanakan, maka kita dapat melihat bahawa hasil output ialah:

Employee对象: name:"张三" id:10001 email:"zhangsan@qq.com"
序列化后的二进制数据: [10 6 230 181 139 229 173 151 16 1 26 12 122 104 97 110 103 115 97 110 64 113 113 46 99 111 109]
反序列化后的Employee对象: name:"张三" id:10001 email:"zhangsan@qq.com"
序列化和反序列化成功!

4. Rumusan

Dalam artikel ini, kami memperkenalkan cara membina protobuf melalui golang. Mula-mula kami memasang perpustakaan bergantung protobuf, kemudian menyusun protobuf, dan akhirnya menggunakan protobuf dalam golang untuk bersiri dan penyahserikatan. Selain digunakan dalam golang, protobuf juga boleh digunakan dalam bahasa pengaturcaraan lain seperti Python dan Java, yang sangat sesuai untuk pertukaran data dalam sistem teragih. Saya harap artikel ini dapat membantu pengaturcara mempelajari dan menguasai teknologi protobuf dengan lebih baik.

Atas ialah kandungan terperinci Cara membina protobuf melalui golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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