Protocol buffers

169 阅读1分钟

下载地址 github.com/protocolbuf…

go语言的protoc包

go get -u github.com/golang/protobuf/protoc-gen-go

test.proto

syntax = "proto2";
package example;

message test {
  required int32 id = 1;
  required string name = 2;
  required int32 age = 3;
}

生成go文件

protoc --go_out=./example test.proto

main.go

package main

import (
	"awesomeProject2/example"
	"fmt"
	"github.com/golang/protobuf/proto"
	"log"
)

func main() {
	t := &example.Test{
		Id:   proto.Int32(3),
		Name: proto.String("haha"),
		Age:  proto.Int32(24),
	}

	// 序列化
	data, err := proto.Marshal(t)
	if err != nil {
		log.Fatal(err)
	}

	fmt.Printf("%s\n", data)
	fmt.Println(len(data))


	// 反序列化
	var newData example.Test
	if err := proto.Unmarshal(data, &newData); err != nil {
		log.Fatal(err)
	}
	fmt.Println(newData.GetName())
	fmt.Println(newData.GetId())
	fmt.Println(newData.GetAge())
}