準備する
3番目のバージョンにはドキュメントがないため、 ここにアクセスしてダウンロードしてください。 インストール(そこではすべて簡単です)。 Goの場合、すべてがここにあります 。 インストール自体
go get -u github.com/golang/protobuf/{proto,protoc-gen-go}
~/.gitconfig
指定する場合は
-f
が必要になる場合があります
[url "ssh://git@github.com/"] insteadOf = https://github.com/
Protoclバッファにまだ慣れていない場合は、2番目のバージョンの説明があります。 3番目のバージョンについては、まだドキュメントがありませんが、それだけで満足できるものです 。
例
たとえば、数値の配列と文字列を保存し、それらを読み返します。 さらに、新しいプロジェクトのルートにいると考えます。 protoファイルは次のようになります
msg / msg.proto
// C/C++ /* */ // 3, - syntax = "proto3"; // , go- package msg; // , message Msg { // _ = _ string key = 1; // repeated slice repeated int64 value = 2; } /* required extensions extensions ( ) Any */ // Sublime
ここで、protoファイルをコンパイルする必要があります
protoc --go_out=. msg/*.proto
その結果、このようなファイルを取得します
msg / msg.pb.go
// package msg import proto "github.com/golang/protobuf/proto" var _ = proto.Marshal /* . , JSON */ type Msg struct { Key string `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` Value []int64 `protobuf:"varint,2,rep,name=value" json:"value,omitempty"` } // , proto.Message func (m *Msg) Reset() { *m = Msg{} } func (m *Msg) String() string { return proto.CompactTextString(m) } func (*Msg) ProtoMessage() {} func init() { }
次に、構造を作成し、そのバイトを書き込み、それを読み戻します
main.go
package main import ( "log" "./msg" "github.com/golang/protobuf/proto" ) func main() { // "" msg1 := &msg.Msg{ Key: "Hello Protocol Buffers", Value: []int64{1, 2, 3, 4}, } // data, err := proto.Marshal(msg1) if err != nil { log.Fatal("marshaling error: ", err) return } // ? log.Printf("data length: %d", len(data)) // msg2 := new(msg.Msg) err = proto.Unmarshal(data, msg2) if err != nil { log.Fatal("unmarshaling error: ", err) } // if msg1.Key != msg2.Key { log.Printf("unexpected value, expected '%s', got '%s'", msg1.Key, msg2.Key) } for i := 0; i < 4; i++ { if msg1.Value[i] != msg2.Value[i] { log.Printf("unexpected value, expected %d, got %d", msg1.Value[i], msg2.Value[i]) } } log.Println("Done") }
ご覧のとおり、「蒸しカブより簡単です。」 さらに深く掘り下げてみると、「メッセージ」のタイプが最初に定義されないように「メッセージ」を保存する特定のベースを作成し、これらの「メッセージ」を特定の構造のメンバーシップに保存したい場合があります。 言い換えれば、私たちが与えたものを特定の形式で保存するライブラリを持つことです。 プロトコルバッファの3番目のバージョンであるproto3では、任意の型を格納するためにAny型が実装されています。 リリースノートにも書いてありますが、実際のところこれまでのところです。 待たなければなりません。 ただし、上記のリンクからオプションを見ると、原則が明確になります-それは実装次第です。 次のようになります。
message Any { string type_url = 1; // bytes value = 2; // }
それはどういう意味ですか...しかし、長い話、 例を見てみましょう。 本質的に、これは、使用されるすべてのタイプとダブルマーシャリングの登録です。ある種のマーシャリングと、基本構造のマーシャリングです。 これはすべて、反射で乱暴に散らばっています。 はい-熟考は長い時間を要します。何もする必要はありません。 それだけです
参照先
GitHubプロトコルバッファリリース
そこに、トラッカー
Goのプロトコルバッファの1つの実装
プロトコルバッファーv2ガイド
そこで、基本的なデータ型
更新する
- 続きがありました。