// +build ignore,OMIT package main import ( "encoding/binary" "io" "log" "os" ) type Gopher struct { Name string AgeYears int } // Example of bad code, missing early return. OMIT func (g *Gopher) WriteTo(w io.Writer) (size int64, err error) { err = binary.Write(w, binary.LittleEndian, int32(len(g.Name))) if err == nil { size += 4 var n int n, err = w.Write([]byte(g.Name)) size += int64(n) if err == nil { err = binary.Write(w, binary.LittleEndian, int64(g.AgeYears)) if err == nil { size += 4 } return } return } return } func main() { g := &Gopher{ Name: "Gophertiti", AgeYears: 3382, } if _, err := g.WriteTo(os.Stdout); err != nil { log.Printf("DumpBinary: %v\n", err) } } // Example of bad API, it's better to use an interface. func (g *Gopher) WriteToFile(f *os.File) (int64, error) { return 0, nil } // Example of bad API, it's better to use a narrower interface. func (g *Gopher) WriteToReadWriter(rw io.ReadWriter) (int64, error) { return 0, nil } // Example of better API. func (g *Gopher) WriteToWriter(f io.Writer) (int64, error) { return 0, nil }