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.
References:
- Ultimate Go Programming
- ardanlabs/gotraining/topics/courses/go
- Computer Systems: A Programmer's Perspective
- Free Gophers Pack
It is a work in progress.
Below are the outline of the all topics. Normally, a topic is covered when there is a link, or several links next to it.
Tasks
- Phase 1: Finish Ultimate Go Programming's video lectures
- Phase 2: Fill in all the missing details using Ardan Labs's links and examples
- Phase 3: Study Computer Systems book to reinforce the theory. Build more programs if needed.
- 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
- 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
- Packages
- Context
- Encoding
- IO
- Logging
- Reflection