|
1 | 1 | ---
|
2 |
| -title: Concurrent Programming with Go |
3 |
| -description: Learn how to write concurrent programs in Go using goroutines and channels. This course covers concurrency patterns, synchronization, and best practices for writing efficient concurrent code in Go. |
4 |
| -coverImage: /images/courses/concurrent-programming-with-go.png |
5 |
| -level: Intermediate |
6 |
| -tags: [Go, Concurrency] |
| 2 | +title: 'Concurrent Programming with Go' |
| 3 | +slug: 'concurrent-programming-with-go' |
| 4 | +coverImage: '/images/courses/concurrent-programming-with-go.png' |
| 5 | +description: "Learn how to write concurrent programs in Go using goroutines and channels. This course covers concurrency patterns, synchronization, and best practices for writing efficient concurrent code in Go." |
| 6 | +level: 'Intermediate' |
| 7 | +tags: ['Go', 'Concurrency'] |
7 | 8 | labs:
|
8 |
| - - title: Introduction to Goroutines |
9 |
| - slug: intro-to-goroutines |
10 |
| - description: Learn about goroutines and how to create concurrent functions. |
11 |
| - - title: Working with Channels |
12 |
| - slug: working-with-channels |
13 |
| - description: Master Go channels for communication between goroutines. |
14 |
| - - title: Synchronization Patterns |
15 |
| - slug: synchronization-patterns |
16 |
| - description: Learn different patterns for synchronizing concurrent operations. |
| 9 | + - title: 'Introduction to Concurrency in Go' |
| 10 | + slug: 'introduction-to-concurrency' |
| 11 | + description: "Understand the difference between concurrency and parallelism, and Go's approach to concurrent programming." |
| 12 | + - title: 'Channels Basics' |
| 13 | + slug: 'channels-basics' |
| 14 | + description: 'Learn about channels, the fundamental communication mechanism between goroutines.' |
| 15 | + - title: 'Bidirectional Channels' |
| 16 | + slug: 'bidirectional-channels' |
| 17 | + description: 'Learn how to use bidirectional channels for sending and receiving data.' |
| 18 | + - title: 'Directional Channels' |
| 19 | + slug: 'directional-channels' |
| 20 | + description: 'Understand how to use channels that can only send or only receive data.' |
| 21 | + - title: 'Buffered Channels' |
| 22 | + slug: 'buffered-channels' |
| 23 | + description: 'Learn about buffered channels that can hold multiple values.' |
| 24 | + - title: 'Creating Goroutines' |
| 25 | + slug: 'creating-goroutines' |
| 26 | + description: 'Learn how to create and use goroutines, the lightweight threads of Go.' |
| 27 | + - title: 'Working with WaitGroups' |
| 28 | + slug: 'working-with-waitgroups' |
| 29 | + description: 'Use WaitGroups to coordinate multiple goroutines and wait for their completion.' |
| 30 | + - title: 'Testing with WaitGroups' |
| 31 | + slug: 'testing-with-waitgroups' |
| 32 | + description: 'Learn strategies for testing concurrent code with WaitGroups.' |
| 33 | + - title: 'Race Conditions' |
| 34 | + slug: 'race-conditions' |
| 35 | + description: 'Understand what race conditions are and how to detect them.' |
| 36 | + - title: 'Using Mutex' |
| 37 | + slug: 'using-mutex' |
| 38 | + description: 'Learn how to use mutexes to protect shared resources from concurrent access.' |
| 39 | + - title: 'The Producer-Consumer Problem' |
| 40 | + slug: 'producer-consumer-problem' |
| 41 | + description: 'Solve the classic producer-consumer problem using Go concurrency primitives.' |
| 42 | + - title: 'Range over Channels' |
| 43 | + slug: 'range-over-channels' |
| 44 | + description: 'Learn how to iterate over the values received from a channel.' |
| 45 | + - title: 'Unbuffered Channels' |
| 46 | + slug: 'unbuffered-channels' |
| 47 | + description: 'Deep dive into unbuffered channels and their synchronization properties.' |
| 48 | + - title: 'Buffered vs Unbuffered Channels' |
| 49 | + slug: 'buffered-vs-unbuffered' |
| 50 | + description: 'Compare buffered and unbuffered channels and learn when to use each.' |
| 51 | + - title: 'Channel Direction' |
| 52 | + slug: 'channel-direction' |
| 53 | + description: 'Learn how to specify and enforce channel direction in function parameters.' |
| 54 | + - title: 'Channel Ownership' |
| 55 | + slug: 'channel-ownership' |
| 56 | + description: 'Understand the concept of channel ownership and why it matters.' |
| 57 | + - title: 'Pipeline Pattern' |
| 58 | + slug: 'pipeline-pattern' |
| 59 | + description: 'Learn how to implement the pipeline pattern for processing streams of data.' |
| 60 | + - title: 'Fan-Out Fan-In Pattern' |
| 61 | + slug: 'fan-out-fan-in' |
| 62 | + description: 'Distribute work and collect results using the fan-out fan-in pattern.' |
| 63 | + - title: 'Cancellation with Context Package' |
| 64 | + slug: 'context-package' |
| 65 | + description: 'Learn how to use the context package to manage goroutine lifecycles and handle cancellation.' |
17 | 66 | ---
|
18 | 67 |
|
19 | 68 | # Concurrent Programming with Go
|
20 | 69 |
|
21 |
| -Welcome to Concurrent Programming with Go! This course will teach you how to harness the power of Go's concurrency model to build efficient, concurrent applications. |
| 70 | +Welcome to the Concurrent Programming with Go course! In this course, you'll learn how to write concurrent programs using Go's powerful concurrency primitives. |
22 | 71 |
|
23 | 72 | ## What You'll Learn
|
24 | 73 |
|
25 |
| -- Go's goroutines for concurrent execution |
26 |
| -- Channels for communication between goroutines |
27 |
| -- Synchronization primitives like Mutex and WaitGroup |
28 |
| -- Common concurrency patterns |
29 |
| -- Detecting and fixing race conditions |
30 |
| -- Creating efficient concurrent algorithms |
| 74 | +- Understanding concurrency versus parallelism |
| 75 | +- Working with goroutines and channels |
| 76 | +- Synchronization techniques using WaitGroups and Mutexes |
| 77 | +- Common concurrency patterns in Go |
31 | 78 | - Best practices for concurrent programming
|
| 79 | +- Error handling in concurrent code |
| 80 | +- Testing concurrent programs |
32 | 81 |
|
33 | 82 | ## Prerequisites
|
34 | 83 |
|
35 |
| -This course assumes you have: |
| 84 | +Before starting this course, you should have: |
36 | 85 |
|
37 |
| -- Basic knowledge of Go programming |
38 |
| -- Completed the "Quick Start with Golang" course or equivalent |
39 |
| -- Understanding of functions and error handling in Go |
| 86 | +- Basic knowledge of Go programming language |
| 87 | +- Understanding of functions, structs, and interfaces in Go |
| 88 | +- Familiarity with Go's error handling |
40 | 89 |
|
41 |
| -## Course Structure |
| 90 | +## Course Modules |
42 | 91 |
|
43 |
| -This course consists of 5 hands-on labs that will guide you through building increasingly complex concurrent applications. Each lab includes practical examples and exercises to help you master concurrent programming in Go. |
| 92 | +This course is divided into several modules to help you learn concurrent programming in Go step by step: |
44 | 93 |
|
45 |
| -Let's start building fast, concurrent programs with Go! |
| 94 | +1. [Introduction to Concurrency](/courses/concurrent-programming-with-go-modules/01-introduction-to-concurrency) - Understand concurrency vs parallelism and Go's approach. |
| 95 | +2. [Channels Basics](/courses/concurrent-programming-with-go-modules/02-channels-basics) - Learn about Go's primary communication mechanism. |
| 96 | +3. [Bidirectional Channels](/courses/concurrent-programming-with-go-modules/03-bidirectional-channels) - See how channels can send and receive data. |
| 97 | +4. [Directional Channels](/courses/concurrent-programming-with-go-modules/04-directional-channels) - Learn about send-only and receive-only channels. |
| 98 | +5. [Buffered Channels](/courses/concurrent-programming-with-go-modules/05-buffered-channels) - Work with channels that can store multiple values. |
| 99 | +6. [Creating Goroutines](/courses/concurrent-programming-with-go-modules/06-creating-goroutines) - Launch lightweight threads in Go. |
| 100 | +7. [Working with WaitGroups](/courses/concurrent-programming-with-go-modules/07-working-with-waitgroups) - Coordinate multiple goroutines. |
| 101 | +8. [Testing with WaitGroups](/courses/concurrent-programming-with-go-modules/08-testing-with-waitgroups) - Write tests for concurrent code. |
| 102 | +9. [Race Conditions](/courses/concurrent-programming-with-go-modules/09-race-conditions) - Identify and understand race conditions. |
| 103 | +10. [Using Mutex](/courses/concurrent-programming-with-go-modules/10-using-mutex) - Protect shared resources from concurrent access. |
| 104 | +11. [The Producer-Consumer Problem](/courses/concurrent-programming-with-go-modules/11-producer-consumer-problem) - Solve this classic concurrency challenge. |
| 105 | +12. [Range over Channels](/courses/concurrent-programming-with-go-modules/12-range-over-channels) - Iterate over channel values elegantly. |
| 106 | +13. [Unbuffered Channels](/courses/concurrent-programming-with-go-modules/13-unbuffered-channels) - Understand synchronization with unbuffered channels. |
| 107 | +14. [Buffered vs Unbuffered Channels](/courses/concurrent-programming-with-go-modules/14-buffered-vs-unbuffered) - Compare the two channel types. |
| 108 | +15. [Channel Direction](/courses/concurrent-programming-with-go-modules/15-channel-direction) - Enforce data flow direction. |
| 109 | +16. [Channel Ownership](/courses/concurrent-programming-with-go-modules/16-channel-ownership) - Establish clear ownership patterns. |
| 110 | +17. [Pipeline Pattern](/courses/concurrent-programming-with-go-modules/17-pipeline-pattern) - Process data through a series of stages. |
| 111 | +18. [Fan-Out Fan-In Pattern](/courses/concurrent-programming-with-go-modules/18-fan-out-fan-in) - Distribute and collect work among goroutines. |
| 112 | +19. [Cancellation with Context Package](/courses/concurrent-programming-with-go-modules/19-context-package) - Manage goroutine lifecycles and cancellation. |
| 113 | + |
| 114 | +Let's explore how Go's concurrency model makes it easy to write concurrent programs that are both efficient and easy to reason about! |
0 commit comments