|  | // Copyright 2013 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 gob_test | 
|  |  | 
|  | import ( | 
|  | "bytes" | 
|  | "encoding/gob" | 
|  | "fmt" | 
|  | "log" | 
|  | ) | 
|  |  | 
|  | type P struct { | 
|  | X, Y, Z int | 
|  | Name    string | 
|  | } | 
|  |  | 
|  | type Q struct { | 
|  | X, Y *int32 | 
|  | Name string | 
|  | } | 
|  |  | 
|  | // This example shows the basic usage of the package: Create an encoder, | 
|  | // transmit some values, receive them with a decoder. | 
|  | func Example_basic() { | 
|  | // 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) some values. | 
|  | err := enc.Encode(P{3, 4, 5, "Pythagoras"}) | 
|  | if err != nil { | 
|  | log.Fatal("encode error:", err) | 
|  | } | 
|  | err = enc.Encode(P{1782, 1841, 1922, "Treehouse"}) | 
|  | if err != nil { | 
|  | log.Fatal("encode error:", err) | 
|  | } | 
|  |  | 
|  | // Decode (receive) and print the values. | 
|  | var q Q | 
|  | err = dec.Decode(&q) | 
|  | if err != nil { | 
|  | log.Fatal("decode error 1:", err) | 
|  | } | 
|  | fmt.Printf("%q: {%d, %d}\n", q.Name, *q.X, *q.Y) | 
|  | err = dec.Decode(&q) | 
|  | if err != nil { | 
|  | log.Fatal("decode error 2:", err) | 
|  | } | 
|  | fmt.Printf("%q: {%d, %d}\n", q.Name, *q.X, *q.Y) | 
|  |  | 
|  | // Output: | 
|  | // "Pythagoras": {3, 4} | 
|  | // "Treehouse": {1782, 1841} | 
|  | } |