| // Copyright 2011 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package main |
| |
| import ( |
| "bytes" |
| "encoding/gob" |
| "fmt" |
| "log" |
| ) |
| |
| type P struct { |
| X, Y, Z int |
| Name string |
| } |
| |
| 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. |
| err := enc.Encode(P{3, 4, 5, "Pythagoras"}) |
| if err != nil { |
| log.Fatal("encode error:", err) |
| } |
| // 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) |
| } |