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.
- Ultimate Go Programming
- Computer Systems: A Programmer's Perspective
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.
- 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.
Table of Contents
- Design Philosophy: Guideline
- Language Mechanics
- Variable: Built-in types | Zero value concept | Initialization | Conversion vs Casting
- Struct: Initialization | Name type vs Anonymous type
- Constant: Initialization | iota
- Function: Initialization
- Data Structures
- Software Design
- Grouping types:
- Interface Pollution:
- Error Handling:
- Packaging: Guideline
- Composition: Guideline
- Data race:
- 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
- Testing and Profiling