0
0
Goprogramming~20 mins

Goroutine lifecycle - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Goroutine Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
Goroutine execution order
What is the output of this Go program?
Go
package main

import (
	"fmt"
	"time"
)

func main() {
	go fmt.Println("Hello from goroutine")
	fmt.Println("Hello from main")
	time.Sleep(100 * time.Millisecond)
}
AHello from main\nHello from goroutine
BHello from goroutine\nHello from main
CHello from main
DNo output (program exits immediately)
Attempts:
2 left
💡 Hint
Remember that goroutines run concurrently and main may finish before they print unless you wait.
Predict Output
intermediate
2:00remaining
Goroutine variable capture
What will be printed by this Go program?
Go
package main

import (
	"fmt"
	"time"
)

func main() {
	for i := 0; i < 3; i++ {
		go func(i int) {
			fmt.Println(i)
		}(i)
	}
	time.Sleep(100 * time.Millisecond)
}
A0\n0\n0
B3\n3\n3
CCompilation error
D0\n1\n2
Attempts:
2 left
💡 Hint
Think about how the loop variable is captured by the goroutine's closure.
🔧 Debug
advanced
2:00remaining
Detecting goroutine leak
What problem does this Go code cause?
Go
package main

import (
	"fmt"
	"time"
)

func worker(ch chan int) {
	for {
		val, ok := <-ch
		if !ok {
			return
		}
		fmt.Println(val)
	}
}

func main() {
	ch := make(chan int)
	go worker(ch)
	ch <- 1
	ch <- 2
	// Missing close(ch)
	select {}
}
AThe program deadlocks because the channel is never closed and worker waits forever.
BThe program prints 1 and 2 and exits cleanly.
CCompilation error due to missing channel close.
DThe program panics at runtime.
Attempts:
2 left
💡 Hint
Think about what happens when the worker goroutine waits on a channel that never closes.
Predict Output
advanced
2:00remaining
Goroutine synchronization with WaitGroup
What is the output of this Go program?
Go
package main

import (
	"fmt"
	"sync"
)

func main() {
	var wg sync.WaitGroup
	wg.Add(2)
	go func() {
		defer wg.Done()
		fmt.Println("First goroutine")
	}()
	go func() {
		defer wg.Done()
		fmt.Println("Second goroutine")
	}()
	wg.Wait()
	fmt.Println("All done")
}
ACompilation error due to missing WaitGroup initialization
BAll done\nFirst goroutine\nSecond goroutine
CFirst goroutine\nSecond goroutine\nAll done
DFirst goroutine\nAll done\nSecond goroutine
Attempts:
2 left
💡 Hint
WaitGroup waits for all goroutines to finish before continuing.
🧠 Conceptual
expert
2:00remaining
Goroutine lifecycle states
Which of the following correctly describes the lifecycle states of a goroutine?
ANew, Runnable, Blocked, Terminated
BCreated, Running, Waiting, Dead
CStart, Execute, Sleep, Stop
DInit, Active, Paused, Finished
Attempts:
2 left
💡 Hint
Think about the main states a goroutine goes through from creation to termination.