Dave Cheney

The acme of foolishness

Skip to content
  • High Performance Go
  • Practical Go
  • Internets of Interest
  • About
    • RSS

Practical Go

A collection of real world advice for writing maintainable Go programs.

Presentations

  • QCon Shanghai 2018
  • GopherCon Singapore 2019

Fundamentals

  • What is the zero value, and why is it useful?
  • The empty struct
  • On declaring variables
  • Go has both make and new functions; what gives?
  • Should methods be declared on T or *T?
  • Slices from the ground up
  • If a map isn’t a reference, what is it?
  • A variable’s name should be independent of its type

Commentary

  • Associative commentary (part 1, part 2)

Package design

  • Avoid package names like base, util, or common
  • Go without package scoped variables

Project design

  • Five suggestions for setting up a Go project
  • Use internal packages to reduce your public API surface

API design

  • Functional options for friendly APIs
  • Don’t force allocations on the callers of your API
  • Be wary of functions which take several parameters of the same type

Error handling

  • Don’t just check errors, handle them gracefully
  • Inspecting errors
  • Constant errors
  • Errors vs exceptions (part 1, part 2, part 3)
  • Eliminate error handling by eliminating errors

Logging

  • Let’s talk about logging

Concurrency

  • Curious Channels
  • Channel axioms
  • Ice cream makers and data races
  • Never start a goroutine without knowing how it will stop
  • Context isn’t for cancellation

Testing

  • How to write benchmarks in Go
  • Simple test coverage, (part 1, part 2)
  • Test fixtures on Go
  • Prefer table driven tests

Elsewhere

  • LinkedIn
  • Serverfault
  • Stackoverflow

Categories

  • Economy
  • Go
  • Hardware Hacking
  • History
  • Internets of interest
  • Photography
  • Programming
  • Retrochallenge
  • Small ideas
  • Uncategorized
  • Useless Trivia

Archives

  • February 2024
  • January 2021
  • December 2020
  • June 2020
  • May 2020
  • April 2020
  • March 2020
  • February 2020
  • December 2019
  • November 2019
  • October 2019
  • September 2019
  • August 2019
  • July 2019
  • June 2019
  • May 2019
  • April 2019
  • February 2019
  • January 2019
  • December 2018
  • November 2018
  • October 2018
  • September 2018
  • August 2018
  • July 2018
  • May 2018
  • January 2018
  • December 2017
  • November 2017
  • September 2017
  • August 2017
  • July 2017
  • June 2017
  • April 2017
  • March 2017
  • February 2017
  • January 2017
  • December 2016
  • November 2016
  • October 2016
  • September 2016
  • August 2016
  • June 2016
  • May 2016
  • April 2016
  • March 2016
  • February 2016
  • January 2016
  • December 2015
  • November 2015
  • October 2015
  • September 2015
  • August 2015
  • July 2015
  • June 2015
  • May 2015
  • March 2015
  • February 2015
  • January 2015
  • December 2014
  • November 2014
  • October 2014
  • September 2014
  • August 2014
  • July 2014
  • June 2014
  • May 2014
  • April 2014
  • March 2014
  • February 2014
  • January 2014
  • December 2013
  • November 2013
  • October 2013
  • September 2013
  • August 2013
  • July 2013
  • June 2013
  • May 2013
  • April 2013
  • January 2013
  • December 2012
  • November 2012
  • October 2012
  • September 2012
  • August 2012
  • February 2012
  • January 2012
  • November 2011
  • October 2011
  • August 2011
  • July 2011
  • June 2011
  • May 2011
  • April 2011
  • March 2011
  • February 2011
  • November 2010
  • October 2010

License

Creative Commons Licence
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
Proudly powered by WordPress