-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtestpickle.go
69 lines (59 loc) · 1.45 KB
/
testpickle.go
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package main
import (
"bytes"
"encoding/gob"
"fmt"
// "os"
"strings"
)
type PhoneNumber struct {
PhoneType string
Number string
}
type Contact struct {
Index int32
FirstName string
LastName string
PhoneNumbers []PhoneNumber
}
func (p PhoneNumber) String() string {
return fmt.Sprintf("PhoneNumber(phoneType='%v', number='%v')", p.PhoneType, p.Number)
}
func (c Contact) String() string {
result := fmt.Sprintf("index=%v firstName='%v' lastName='%v' phoneNumbers=[", c.Index, c.FirstName, c.LastName)
for _, elem := range c.PhoneNumbers {
result += fmt.Sprintf("%v, ", elem)
}
result = strings.TrimSuffix(result, ", ")
return result + "]"
}
func main() {
number1 := PhoneNumber{PhoneType: "home", Number: "123-456-7890"}
number2 := PhoneNumber{PhoneType: "work", Number: "012-345-6789"}
contact := Contact{Index: 1, FirstName: "John", LastName: "Smith", PhoneNumbers: []PhoneNumber{number1, number2}}
var buf bytes.Buffer
enc := gob.NewEncoder(&buf)
err := enc.Encode(contact)
if err != nil {
panic(err)
}
dump := buf.Bytes()
// To write to a file:
// err = os.WriteFile("file.bin", dump, 0644)
// if err != nil {
// panic(err)
// }
var recovered Contact
// To read from a file:
// dump, err = os.ReadFile("file.bin")
// if err != nil {
// panic(err)
// }
dec := gob.NewDecoder(bytes.NewBuffer(dump))
err = dec.Decode(&recovered)
if err != nil {
panic(err)
}
fmt.Println(contact)
fmt.Println(recovered)
}