2017
14 hours
Table of Contents
Introduction
Part I: Introduction
Lesson 1: Design Guidelines
Topics
1.1 Prepare Your Mind
1.2 Productivity versus Performance
1.3 Correctness versus Performance
1.4 Code Reviews
Part II: Language Mechanics
Lesson 2: Language Syntax
Topics
2.1 Variables
2.2 Struct Types
2.3 Pointers
2.4 Constants
2.5 Functions
Lesson 3: Data Structures
Topics
3.1 Data-Oriented Design
3.2 Arrays
3.3 Slices
3.4 Maps
Lessons 4: Decoupling
Topics
4.1 Methods
4.2 Interfaces
4.3 Embedding
4.4 Exporting
Part III: Software Design
Lesson 5: Composition
Topics
5.1 Grouping Types
5.2 Decoupling
5.3 Conversion and Assertions
5.4 Interface Pollution
5.5 Mocking
5.6 Design Guidelines
Lesson 6: Error Handling
Topics
6.1 Default Error Values
6.2 Error Variables
6.3 Type as Context
6.4 Behavior as Context
6.5 Find the Bug
6.6 Wrapping Errors
Lesson 7: Packaging
Topics
7.1 Language Mechanics
7.2 Design Guidelines
7.3 Package-Oriented Design
Part IV: Concurrency
Lesson 8: Goroutines
Topics
8.1 Go Scheduler Internals
8.1 Language Mechanics
8.2 Less Is More
Lesson 9: Data Races
Topics
9.1 Race Detection
9.2 Atomic Functions
9.3 Mutexes
Lesson 10: Channels
Topics
10.1 Language Mechanics
10.2 Unbuffer Examples
10.3 Buffer Example
10.4 Select Statement
10.5 Channel Design Guidelines
10.6 Concurrent Software Design
Lesson 11: Concurrency Patterns
Topics
11.1 Context
11.2 Task
11.3 Logger
Part V: Testing and Profiling
Lesson 12: Testing
Topics
12.1 Basic Testing
12.2 Web Testing
12.3 Example Tests
12.4 Sub Tests
12.5 Test Coverage
12.6 Benchmarking
12.7 Fuzzing
Lesson 13: Profiling
Topics
13.1 Stack Traces
13.2 Profiling Guidelines
13.3 Memory Tracing
13.4 Scheduler Tracing
13.5 Memory and CPU Profiling
13.6 pprof Profiling
13.7 Blocking Profiling
13.8 Real World Example
Summary