github.com/graybobo/golang.org-package-offline-cache@v0.0.0-20200626051047-6608995c132f/x/talks/2013/bestpractices/shortercode3.go (about)

     1  // +build OMIT
     2  
     3  package main
     4  
     5  import (
     6  	"encoding/binary"
     7  	"io"
     8  	"log"
     9  	"os"
    10  )
    11  
    12  type Gopher struct {
    13  	Name     string
    14  	AgeYears int
    15  }
    16  
    17  type binWriter struct {
    18  	w    io.Writer
    19  	size int64
    20  	err  error
    21  }
    22  
    23  // Write writes a value to the provided writer in little endian form.
    24  func (w *binWriter) Write(v interface{}) {
    25  	if w.err != nil {
    26  		return
    27  	}
    28  	if w.err = binary.Write(w.w, binary.LittleEndian, v); w.err == nil {
    29  		w.size += int64(binary.Size(v))
    30  	}
    31  }
    32  
    33  func (g *Gopher) WriteTo(w io.Writer) (int64, error) {
    34  	bw := &binWriter{w: w}
    35  	bw.Write(int32(len(g.Name)))
    36  	bw.Write([]byte(g.Name))
    37  	bw.Write(int64(g.AgeYears))
    38  	return bw.size, bw.err
    39  }
    40  
    41  func main() {
    42  	g := &Gopher{
    43  		Name:     "Gophertiti",
    44  		AgeYears: 3382,
    45  	}
    46  
    47  	if _, err := g.WriteTo(os.Stdout); err != nil {
    48  		log.Printf("DumpBinary: %v\n", err)
    49  	}
    50  }