|  | // 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) | 
|  | } |