Google Protocol Buffers (以下、ProtoBuf と呼びます) は、分散システムでのデータ送信と保存に広く使用されている軽量で効率的なデータシリアル化形式です。最新のプログラミング言語である Go 言語は ProtoBuf のサポートにも非常に優れており、この記事では Go 言語でデータのシリアル化に ProtoBuf を使用する方法を紹介します。
1. ProtoBuf のインストール
ProtoBuf の使用を開始する前に、まず ProtoBuf をインストールする必要があります。公式 Web サイト (https://developers.google.com/protocol-buffers/) からオペレーティング システムに対応するバイナリ パッケージをダウンロードしてインストールすることも、システム パッケージ マネージャー (Ubuntu: sudo など) を使用してインストールすることもできます。 apt-get install protobuf-compiler )。
インストールが完了したら、次のコマンドを使用してインストールが成功したかどうかを確認できます:
$ protoc --version
libprotoc 3.6.1
2. メッセージ フォーマットを定義します
ProtoBuf をデータのシリアル化に使用する前に、最初にメッセージ フォーマットを定義する必要があります。 ProtoBuf では、メッセージ形式は .proto ファイルによって定義されます。たとえば、次のように Person という名前のメッセージ形式を定義します。
syntax = "proto3";
message Person {
string name = 1;
int32 age = 2;
繰り返される文字列 address = 3;
}
ここで、syntax は ProtoBuf で使用される構文バージョンを指定し、message はメッセージ タイプを定義し、名前、年齢、およびアドレスはメッセージ内のフィールドです。フィールドは数値識別子で指定され、一意である必要があります。
ProtoBuf はネストされたメッセージ タイプをサポートしており、あるメッセージ タイプを別のメッセージ タイプのフィールドとして定義できることは注目に値します。
3. Go コードのコンパイルと生成
ProtoBuf は、プログラムで使用するために .proto ファイルを対応する言語のコードにコンパイルする必要があります。 Go 言語では、コンパイルに protoc-gen-go プラグインを使用することも、github.com/golang/protobuf/protoc-gen-go プラグインをコンパイルに使用することもできます。この記事では、最初の方法を例として紹介します。
まず、プラグインをインストールする必要があります:
$ go get -u github.com/golang/protobuf/protoc-gen-go
次に、次のコマンドを使用します。 .proto ファイルをコンパイルするコマンド:
$ protoc --go_out=. *.proto
これにより、person.pb.go という名前の Go ファイルが生成されます。メッセージ タイプ、シリアル化および逆シリアル化関連のメソッド。
4. データのシリアル化に ProtoBuf を使用する
プログラム内でデータのシリアル化に ProtoBuf を使用するのは非常に簡単です。例として Person メッセージを取ると、次のコードを使用して Person オブジェクトをバイナリ データにシリアル化できます:
package main
#import (
"log" "github.com/golang/protobuf/proto"
)
func main() {
p := &Person{ Name: "Tom", Age: 20, Address: []string{"Shanghai", "Beijing"}, } data, err := proto.Marshal(p) if err != nil { log.Fatal("marshaling error: ", err) } log.Println(data)
}
上記のコードでは、まず Person オブジェクト p を作成し、次に proto.Marshal メソッドを呼び出してバイナリ データにシリアル化し、印刷して出てきます。 proto.Marshal メソッドを使用する場合は、ポインターを Person オブジェクトに渡す必要があることに注意してください。
5. データの逆シリアル化に ProtoBuf を使用する
データのシリアル化と同様に、データの逆シリアル化に ProtoBuf を使用するのも非常に簡単です。次のコードを使用して、シリアル化されたバイナリ データを Person オブジェクトに逆シリアル化できます。
package main
import (
"log" "github.com/golang/protobuf/proto"
)
func main( ) {
data := []byte{10, 3, 84, 111, 109, 16, 20, 26, 8, 83, 104, 97, 110, 103, 104, 97, 105, 18, 7, 66, 101, 105, 106, 105, 110, 103} p := &Person{} err := proto.Unmarshal(data, p) if err != nil { log.Fatal("unmarshaling error: ", err) } log.Println(p)
}
上記のコードでは、まずバイナリ データを定義し、次に proto.Unmarshal メソッドを呼び出して、それを Person オブジェクトに逆シリアル化し、出力します。
6. まとめ
この記事では、Go 言語でデータをシリアル化するために ProtoBuf を使用する方法を紹介しました。データのシリアル化および逆シリアル化に ProtoBuf を使用する場合は、対応する言語でコードを生成するためにメッセージ形式を定義およびコンパイルする必要があることに注意してください。また、ProtoBuf を使用したデータのシリアル化と逆シリアル化は非常に簡単で、対応するメソッドを呼び出すだけで完了します。
以上がGo 言語でのデータのシリアル化に Google プロトコル バッファーを使用するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。