ホームページ  >  記事  >  バックエンド開発  >  golang を使用して protobuf を構築する方法

golang を使用して protobuf を構築する方法

PHPz
PHPzオリジナル
2023-04-25 10:48:451522ブラウズ

インターネット技術の発展に伴い、Golang 言語に興味を持つ初心者プログラマーが増えています。新しいプログラミング言語として、golang はプログラマーによって使用されることが増えています。 golang 言語に習熟すると、プログラマーは高品質のアプリケーションを迅速に開発できるようになり、作業効率が向上します。この記事では、golang を使用して protobuf を構築する方法を検討します。

1. protobuf の概要

Protobuf (正式名は Protocol Buffers) は、データ形式、データ ストレージ、およびデータ交換を記述し、さまざまなプログラミング言語用のインターフェイス ライブラリを提供するプロトコルです。 protobuf は、構造化データをシリアル化し、ストレージ領域を効率的に圧縮でき、優れたスケーラビリティを備えているため、さまざまな分散システムでの使用に非常に適しています。

2. protobuf のインストール

protobuf を使用するには、まずシステムに protobuf をインストールする必要があります。以下では、Linux システムに protobuf をインストールする方法を紹介します。

  1. 依存ライブラリのインストール

protobuf をインストールする前に、最初にいくつかの依存ライブラリをインストールする必要があります。次のコマンドを使用して依存ライブラリをインストールできます:

sudo apt-get update

sudo apt-get install autoconf automake libtool curl make g++ unzip
  1. protobuf ソース コードのダウンロード

protobuf の公式 Web サイトにアクセスして、protobuf ソース コード パッケージをダウンロードできます。 : https://github.com/protocolbuffers/protobuf/releases。現在のオペレーティング システムに適したバージョンを選択し、ダウンロード後、指定したパスに解凍します。

  1. protobuf のコンパイル

解凍された protobuf ソース コード ディレクトリで次のコマンドを実行します。

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

上記の手順が正常に実行されると、protobuf はbe インストールは成功しました。

3. protobuf の使用

protobuf をインストールした後、protobuf の使用を開始できます。以下は、golang を通じて protobuf を使用する手順の簡単な例です。

  1. データ構造の定義

データ構造を .gproto ファイルで定義する必要があります。たとえば、Employee データ構造を次のように定義します。

syntax = "proto3";

package myproto;

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

上記のコードは、Employee という名前のデータ構造を定義します。これには、name、id、および email の 3 つのフィールドが含まれます。各フィールドには、異なる実装間の通信に使用される一意の識別番号があります。

  1. golang ファイルの生成

データ構造を定義した後、protobuf コンパイラーを使用してそれを golang コードに変換する必要があります。次のコマンドを使用して golang ファイルを生成します。

protoc --go_out=. employee.proto

ここで、employee.proto は定義されたデータ構造ファイルであり、--go_out オプションは golang コードの生成を示します。このコマンドは、同じディレクトリにemployee.pb.goファイルを生成します。

  1. golang コードの使用

golang コードを生成した後、それを golang で使用できます。以下は、Employee オブジェクトを作成し、シリアル化して、逆シリアル化するサンプル プログラムです。

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("序列化和反序列化成功!")
}

上記のコードでは、protobuf によって提供される proto.Marshal メソッドと proto.Unmarshal メソッドを使用して、Employee オブジェクトをシリアル化および逆シリアル化します。プログラムが正常に実行されると、出力結果が次のようになることを確認できます:

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"
序列化和反序列化成功!

IV. まとめ

この記事では、golang を使用して protobuf をビルドする方法を紹介しました。まず protobuf 依存関係ライブラリをインストールし、次に protobuf をコンパイルし、最後に golang で protobuf を使用してシリアル化と逆シリアル化を行いました。 protobuf は golang での使用に加えて、Python や Java などの他のプログラミング言語でも使用でき、分散システムでのデータ交換に非常に適しています。この記事が、プログラマーが protobuf テクノロジーをよりよく学び、習得するのに役立つことを願っています。

以上がgolang を使用して protobuf を構築する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。