Go Proverbs
The Go Proverbs are a collection of pithy sayings by Rob Pike (one of Go’s creators) that encapsulate the philosophy and best practices of the language. They were first presented at Gopherfest 2015.
The Proverbs
- Don’t communicate by sharing memory, share memory by communicating. Use channels to pass data between goroutines rather than locking shared variables.
- Concurrency is not parallelism. Concurrency is about dealing with lots of things at once. Parallelism is about doing lots of things at once.
- Channels orchestrate; mutexes serialize.
- The bigger the interface, the weaker the abstraction. Small interfaces (1-2 methods) are much more reusable and powerful.
- Make the zero value useful. Types should be ready to use immediately without complex initialization.
- interface{} says nothing. Empty interfaces provide no type safety or information.
- Gofmt’s style is no one’s favorite, yet gofmt is everyone’s favorite. Consistency is more important than personal preference.
- A little copying is better than a little dependency.
- Syscall must always be guarded with build tags.
- Cgo must always be guarded with build tags.
- Cgo is not Go.
- With the unsafe package there are no guarantees.
- Clear is better than clever. Readable code is superior to “clever” hacks.
- Reflection is never clear.
- Errors are values. Treat errors as data to be inspected and handled, not exceptions to be thrown.
- Don’t just check errors, handle them gracefully.
- Design the architecture, name the components, document the details.
- Documentation is for users.
- Don’t panic. Use panics only for truly unrecoverable errors.
Summary
These proverbs emphasize Go’s commitment to simplicity, readability, and safe concurrency. They serve as a guiding light for writing “idiomatic” Go code.