101+ coding interview problems with detailed solutions, test cases, and program analysis →
This repo contains my notes on learning Go and computer systems. Different people have different learning style. For me, I learn best by doing and walking through examples. Hence, I am trying to take notes carefully and comment directly on the source code, rather than writing up Markdown files. That way, I can understand every single line of code as I am reading and also be mindful of the theories behind the scene.
In the mix, I also include links to other articles that I find helpful.
If you’re interested in getting updates for this, feel free to join my mailing list here →
- 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