Go Progression Ladder
The Go progression ladder is a grouping of concepts and skills relevant to Go programming. It provides aspiring Go programmers with a way to track and improve their Go skills.
| novice | |||
| CONCEPTS | SKILLS | RESOURCES | COMPLETED |
| Line break rules | Understand line break rules In Go such as semicolon insertion and comma separator rules | link link | |
| Variable rules | Understand rules about unused variables and exceptions to each case | link link | |
| Import rules | Rules about unused imports and exceptions to each case | link link | |
| Type inference | Understand what is type inference when declaring variables | link | |
| Type assertions | Understand what is type assertions and how to perform them | link link | |
| Variable scopes | Understanding how scopes work and what is variable shadowing | link link link | |
| The nil value | Understanding how nil is handled in Go | link link | |
| Strings | Understanding how strings are represented | link link link | |
| Slices and Arrays | Declare and work with Slices and Arrays | link link link | |
| Maps | Declare and work with Maps | link link link | |
| Range loop | Understanding how to loop using range in Go | link link link | |
| Goroutines | Learn what are Goroutines and how to use them | link link | |
| Channels | Define and use channels | link link link | |
| Structs | Understand what are structs and how to define them | link link link | |
| Interfaces | Learn how to use interfaces | link link link | |
| Methods | Define and use methods | link link link | |
| Errors | Understand what are errors and how to do error handling | link link link | |
| Deferred calls | Learn what Defer does and how to use | link link link | |
| Exported/Unexported identifiers | Understand how to export or hide identifiers | link link | |
| advanced_beginner | |||
| CONCEPTS | SKILLS | RESOURCES | COMPLETED |
| Underlying types | Understand underlying types and type identity rules | link link | |
| Type Embedding | Understand and use Type Embedding | link link link | |
| Panic and Recover | Understand the mechanics of Panic and Recover | link link link | |
| Reflection | Understand and use Reflection | link link link | |
| Pointers | Use pointers effectively | link link link | |
| Concurrency Synchronization Techniques | How to utilize concurrency in Go | link link link | |
| Atomic Operations | Use atomic variables and operations | link link | |
| Race conditions and deadlocks | Detecting and fixing race conditions and deadlocks | link link link | |
| Pointer vs value receivers | Understand pointer vs value receivers in types | link link link | |
| JSON/GOB encoding | Use JSON and gob encoding | link link link | |
| competent | |||
| CONCEPTS | SKILLS | RESOURCES | COMPLETED |
| Unsafe types | Working around the type system with types.Unsafe | link link link | |
| Bounds check elimination | Understand what is bound check elimination and how to use it | link link | |
| Value comparison and assignment rules | |||
| Go Memory Model | Understand more about the memory model | link link | |
| Type Alignment and Type Value Sizes | Understand the inner layout of memory and alignment guarantees | link link link | |
| Goto statements | Use goto and label statements | link link | |
| proficient | |||
| CONCEPTS | SKILLS | RESOURCES | COMPLETED |
| Profiling Go programs | Understand how to profile Go programs for performance | link link link | |
| Cgo | How to bridge C with Go | link link link | |
| Escape analysis | What is escape analysis and how can you utilize it | link link link | |
| System Calls | Execute System Calls | link link | |
| expert | |||
| CONCEPTS | SKILLS | RESOURCES | COMPLETED |
| Go Assembly | Understand the How Go compiles to Assembly | link link link | |
| Channel structure | Understand the internal structure of Channels | link link | |
| Garbage collector | Learn more about the Garbage Collector | link | |
| Go modules | Learn about Go modules | link link | |
This is a community-driven document, please share your feedback, help us to improve it. Please open an issue or send us a PR on Github!
Contributors
| Theo Despoudis | https://twitter.com/nerdokto |
We need your help!
This is a community-driven project, please share your feedback and
help us to improve it.
Please open an issue or send us a PR on GitHub!