1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
package main
import (
"fmt"
// proto 文件生成 go 文件存放的路径
"jicki/protobuf_demo/pb"
"github.com/gogo/protobuf/proto"
)
//
func main() {
// 定义一个 Person 结构体
person := &pb.Person{
Name: "小炒肉",
Age: 20,
Emails: []string{"jicki@qq.com", "jicki@vip.qq.com"},
Phones: []*pb.PhoneNumber{
&pb.PhoneNumber{
Number: "1333333333",
Type: pb.PhoneType_MOBILE,
},
&pb.PhoneNumber{
Number: "85858585",
Type: pb.PhoneType_HOME,
},
},
}
// 序列化:
// 将 person 结构体, 进行 proto 序列化, 得到一个二进制文件.
// 如下: data 为需要传输的 数据
data, err := proto.Marshal(person)
if err != nil {
fmt.Println("proto Marshal err: ", err)
return
}
// 反序列化:
// 定义一个空结构体对象
newPerson := &pb.Person{}
err = proto.Unmarshal(data, newPerson)
if err != nil {
fmt.Println("proto Unmarshal err: ", err)
return
}
fmt.Println("源数据: ", person)
fmt.Println("序列化后的数据: ", data)
fmt.Println("反序列化后的数据: ", newPerson)
}
|
v1.4.14