-
Notifications
You must be signed in to change notification settings - Fork 21
/
gob.go
52 lines (43 loc) · 941 Bytes
/
gob.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
package main
import (
"bytes"
"encoding/gob"
"fmt"
"log"
)
type I interface {
Run()
}
type P struct {
X, Y, Z int
Name string
}
func (p P) Run() {
}
type Q struct {
X, Y *int32
Name string
}
func main() {
// Initialize the encoder and decoder. Normally enc and dec would be
// bound to network connections and the encoder and decoder would
// run in different processes.
var network bytes.Buffer // Stand-in for a network connection
enc := gob.NewEncoder(&network) // Will write to network.
dec := gob.NewDecoder(&network) // Will read from network.
// Encode (send) the value.
encode(enc, P{3, 4, 5, "Pythagoras"})
// Decode (receive) the value.
var q Q
err := dec.Decode(&q)
if err != nil {
log.Fatal("decode error:", err)
}
fmt.Printf("%q: {%d,%d}\n", q.Name, *q.X, *q.Y)
}
func encode(enc *gob.Encoder, obj I) {
err := enc.Encode(obj)
if err != nil {
log.Fatal("encode error:", err)
}
}