Introduction
A brief history of Go
- Began life at Google and is widely used there.
- Conceived in 2007, publicly announced 2009, and v1 was released in 2012
- Designers cited their dislike of C++ as a primary motivation for designing Go
Core tenets
Compiled - Go compiles to a binary that can run on all common operating systems.
Concurrency-forward - Go handles the heavy lifting for matching routines to threads. You get to focus on the logic.
Object-oriented/imperative - While you can apply many functional concepts here, Go is unabashedly object-oriented.
Statically-typed - Everything has a type!
I C what you did there
Go takes its cues from C, Python, and Java; but adopted patterns from dynamically typed languages:
- type inference
- semicolons are inferred
- fast compilation
- remote package management and online documentation
Already ready already
- Robust native tooling
- Built-in concurrency primitives
- Language provides tools for building, formatting, running, documenting, etc
- Native unit testing library (though supplementing it is recommended)
- Built-in dependency management
Upsides
- Easy to learn
- Large, excited community
- Simple concurrency
- Robust plug-ins for most popular IDEs
- FUN
Downsides
- Unit testing with mocks has a learning curve
- Error handling may be bulky for some
- Concurrency is easy to learn, difficult to master