101+ coding interview problems with detailed solutions, test cases, and program analysis →
Last updates is on August 2020.
A year ago, in August 2019, I shared this Ultimate Go Study Guide project on GitHub, and surprisingly, it got a lot of attention from the community. Fast forward to August 2020, it now has over 11K stars, 900 forks with the help of more than 20 contributors.
The project is a collection of my notes while learning Go programming language from Ardan Labs's Ultimate Go course. Honestly, I couldn’t thank Bill Kennedy and the Ardan Labs team enough for open-sourcing this wonderful material. They’ve done such great jobs putting together their knowledge, insights into their courses and making them available to the public.
Different people have different learning styles. For me, I learn best by doing and walking through examples. That said, I take notes carefully, comment directly on the source code to make sure that I understand every single line of code as I am reading and also be mindful of the theories behind the scene.
As Ultimate Go Study Guide keeps growing, there’s one issue that keeps coming up. That’s about the format of the project. Specifically, many people have requested an eBook version where the content is more streamlined and they can read it at their convenience.
So, here comes The Ultimate Go Study Guide eBook version. For the last 3 months or so, I have spent most of my free time putting together everything here into a 200-page book. Other than all the good stuff from Ultimate Go, two new and better things in this version are:
- Follow-along code input and output.
- Diagrams.
Hope it makes your journey of learning Go a bit easier. And again, thank you all for your support. I really appreciate it.
Here’s the link for the book: https://gum.co/bpUYF.
Note that I’ve made it free, though I would really appreciate your support. Regardless, you will receive the book in 2 different formats: PDF and ePub.
- Design Philosophy: Guideline
- Language Mechanics
- Syntax
- Variable: Built-in types | Zero value concept | Initialization | Conversion vs Casting
- Struct: Initialization | Name type vs Anonymous type
- Pointer:
- Constant: Initialization | iota
- Function: Initialization
- Data Structures
- Decoupling
- Method:
- Interface:
- Embedding:
- Exporting:
- Syntax
- Software Design
- Composition:
Guideline
- Grouping types:
- Decoupling:
- Conversion:
- Interface Pollution:
- Mocking:
- Error Handling:
- Packaging: Guideline
- Dependency management: Go Modules
- Composition:
Guideline
- Concurrency
- Mechanics
- Goroutine:
- Data race:
- Channel:
- Guideline
- Language Mechanics | Unbuffered channel: Signaling with(out) data
- Unbuffered channel: Double signal | Buffered channel: Close and range | Unbuffered channel: select and receive | Unbuffered channel: select and send | Buffered channel: Select and drop
- Unbuffered channel (Tennis match)
- Unbuffered channel (Replay race)
- Buffered channel: Fan Out
- Select
- Patterns
- Context:
- Pattern
- Task
- Logger
- Mechanics
- Testing and Profiling
- Testing:
- Benchmarking
- Fuzzing
- Profiling
- Stack Trace: Review | Packing
- GODEBUG: Memory Tracing