📖 Scenario: You are building a simple Go program to understand how goroutines work. Goroutines are like lightweight helpers that run tasks at the same time as your main program. This helps your program do many things without waiting for each one to finish.
🎯 Goal: You will create a program that starts a goroutine, lets it run, and then shows when it finishes. This will help you see the lifecycle of a goroutine from start to end.
📋 What You'll Learn
Create a channel to communicate between goroutine and main function
Start a goroutine that sends a message when done
Use a variable to hold the message from the goroutine
Print the message received from the goroutine
💡 Why This Matters
🌍 Real World
Goroutines help programs do many tasks at the same time, like handling multiple users or downloading files without waiting.
💼 Career
Understanding goroutine lifecycle is key for Go developers to write efficient, concurrent programs used in web servers, cloud services, and more.
Progress0 / 4 steps
1
Create a channel to communicate
Create a channel called done that can send and receive strings using make(chan string).
Go
Hint
Use make(chan string) to create a channel for strings.
2
Start a goroutine that sends a message
Start a goroutine using go keyword that sends the string "Goroutine finished" to the done channel.
Go
Hint
Use go func() { ... }() to start a goroutine and send the message to done.
3
Receive the message from the goroutine
Create a variable called msg and receive the string from the done channel using msg := <-done.
Go
Hint
Use msg := <-done to receive the message from the channel.
4
Print the message received from the goroutine
Use fmt.Println(msg) to print the message stored in msg.
Go
Hint
Use fmt.Println(msg) to show the message on the screen.
Practice
(1/5)
1. What does a goroutine in Go allow your program to do?
easy
A. Make the program run slower
B. Automatically fix bugs in the code
C. Prevent the program from exiting
D. Run multiple functions at the same time
Solution
Step 1: Understand goroutine purpose
A goroutine lets your program run functions concurrently, meaning at the same time.
Step 2: Compare options
Only Run multiple functions at the same time correctly describes this behavior. Other options are incorrect or unrelated.
Final Answer:
Run multiple functions at the same time -> Option D
Quick Check:
Goroutine = concurrent execution [OK]
Hint: Goroutines run functions concurrently, like multitasking [OK]
Common Mistakes:
Thinking goroutines slow down the program
Believing goroutines prevent program exit automatically
Assuming goroutines fix code errors
2. Which of the following is the correct syntax to start a goroutine for function doWork()?
easy
A. goroutine doWork()
B. go doWork()
C. start doWork()
D. run go doWork()
Solution
Step 1: Recall goroutine syntax
In Go, prefixing a function call with go starts it as a goroutine.
Step 2: Check options
Only go doWork() uses the correct syntax: go doWork(). Others are invalid.
Final Answer:
go doWork() -> Option B
Quick Check:
Start goroutine = go + function call [OK]
Hint: Use 'go' before function call to start goroutine [OK]
Common Mistakes:
Using keywords like 'start' or 'run' instead of 'go'
Writing 'goroutine' as a keyword
Adding extra words before 'go'
3. What will be the output of this Go program?
package main
import (
"fmt"
"time"
)
func sayHello() {
fmt.Println("Hello from goroutine")
}
func main() {
go sayHello()
fmt.Println("Main function finished")
time.Sleep(100 * time.Millisecond)
}
medium
A. Main function finished
B. Hello from goroutine\nMain function finished
C. Main function finished\nHello from goroutine
D. No output
Solution
Step 1: Understand goroutine and main flow
The goroutine runs sayHello() concurrently, printing "Hello from goroutine". The main function prints "Main function finished" immediately.
Step 2: Consider the sleep delay
The time.Sleep pauses main to allow goroutine to run before program exits, so both prints appear.
Final Answer:
Main function finished
Hello from goroutine -> Option C
Quick Check:
Sleep allows goroutine output after main print [OK]
Hint: Sleep main to let goroutine print before exit [OK]
Common Mistakes:
Ignoring sleep causes goroutine output to miss
Assuming goroutine prints before main
Expecting no output without sleep
4. Identify the problem in this Go code snippet:
package main
import "fmt"
func main() {
go func() {
fmt.Println("Inside goroutine")
}()
}
medium
A. The goroutine will never run because main exits immediately
B. Syntax error in anonymous function
C. Missing import for goroutine package
D. No problem, code runs fine
Solution
Step 1: Analyze goroutine lifecycle
The main function starts a goroutine but then immediately exits, ending the program.
Step 2: Effect on goroutine execution
Because main exits, the goroutine may not get time to run, so "Inside goroutine" might never print.
Final Answer:
The goroutine will never run because main exits immediately -> Option A
Quick Check:
Main exit stops goroutine early [OK]
Hint: Main must wait or goroutine may not run [OK]
Common Mistakes:
Thinking goroutine runs after main exits
Assuming syntax error in anonymous function
Believing a special import is needed
5. You want to start 3 goroutines that each print their number (1, 2, 3). Which code correctly ensures each goroutine prints its own number without race conditions?
package main
import (
"fmt"
"time"
)
func main() {
for i := 1; i <= 3; i++ {
// Which option below is correct here?
}
time.Sleep(100 * time.Millisecond)
}
hard
A. go func(n int) { fmt.Println(n) }(i)
B. go func() { fmt.Println(i) }(i)
C. go func() { fmt.Println(i) }()
D. go func(n int) { fmt.Println(i) }(i)
Solution
Step 1: Understand variable capture in goroutines
Loop variable i changes during iterations; capturing it directly in goroutine causes all to print last value.
Step 2: Use parameter to pass current value
Passing i as a parameter n to the goroutine fixes this, so each prints its own number.
Final Answer:
go func(n int) { fmt.Println(n) }(i) -> Option A
Quick Check:
Pass loop variable as parameter to goroutine [OK]
Hint: Pass loop variable as function parameter to avoid capture issues [OK]
Common Mistakes:
Capturing loop variable directly causing all prints same value
Passing wrong variable to goroutine
Confusing parameter and captured variable
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.