https://talks.golang.org/2013/bestpractices.slide#19