Go is a language designed for engineering teams. It's central themes are simplicity, readability, and maintainability. This talk will provide best practice real world advice for teams building projects in Go covering five areas; idiomatic code, package and api design, error handling, concurrency, and testing.
- Choose identifiers for clarity, not brevity
- Use a consistent declaraton style
- A good package starts with its name An identifier’s name includes its package name Prefer lower case package names and import paths
- Rather than nesting deeply, return early
- Make the zero value useful
- Eschew package level state. No package level variables. Avoid global side effects.
- Consider fewer, larger packages Arrange code into files by import statements. Prefer nouns for file names. Eschew elaborate package hierarchies, resist the desire to apply taxonomy
- Keep package main small as small as possible
- Design APIs that are hard to misuse. Design APIs for their default use case.
- Prefer var args to T parameters
- Let callers define the interface they require
- Prefer streaming interfaces
- Use type assertions for optional behaviour
- Elminate handling by eliminating errors
- Only handle an error once
- Never start a goroutine without when it will stop. When sending or receiving on a channel, consider what happens if the other party never receives the message
- Keep yourself busy while waiting for a goroutine. or, do the work yourself.
- Leave concurrency to the caller