小さいサンプルです。
Marshal と Unmarshal は同じファイル構成で、 main.go
のロジック切り替えで違いを見てみます。
参考にした公式ページはこちらです。
Protocol Buffer Basics: Go
$ tree
.
├── main.go
└── person
├── person.pb.go
└── person.proto
syntax = "proto3";
package person;
message Person {
string Name = 1;
}
$ protoc -I=./person --go_out=./person ./person/person.proto
Marshal
インスタンスを byte へ。
main.go
package main
import (
"fmt"
"github.com/golang/protobuf/proto"
pb "github.com/mochizukikotaro/study-proto-marshal/person"
)
func main() {
p := &pb.Person{
Name: "yuki",
}
data, _ := proto.Marshal(p)
fmt.Println(data)
}
$ go run main.go
[10 4 121 117 107 105]
Unmarshal
byte からインスタンスを。
main.go
package main
import (
"fmt"
"github.com/golang/protobuf/proto"
pb "github.com/mochizukikotaro/study-proto-marshal/person"
)
func main() {
p := &pb.Person{}
proto.Unmarshal([]byte{10, 4, 121, 117, 107, 105}, p)
fmt.Println(p)
}
$ go run main.go
Name:"yuki"
以上となります。