Bird
Raised Fist0
Goprogramming~5 mins

Goroutine lifecycle - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a goroutine in Go?
A goroutine is a lightweight thread managed by the Go runtime. It allows functions to run concurrently without the overhead of traditional threads.
Click to reveal answer
intermediate
What are the main states in a goroutine's lifecycle?
The main states are:
  • Created (ready to run)
  • Running (actively executing)
  • Waiting (blocked on I/O, channel, or synchronization)
  • Dead (finished execution)
Click to reveal answer
intermediate
How does a goroutine transition from waiting to running?
When the event it waits for completes (like data on a channel or a timer), the goroutine is moved from waiting to ready, then scheduled by the Go runtime to run.
Click to reveal answer
beginner
What happens when a goroutine finishes its function?
It enters the dead state and is cleaned up by the Go runtime. It no longer consumes CPU or memory resources.
Click to reveal answer
intermediate
Why are goroutines considered lightweight compared to OS threads?
Because goroutines use small stacks that grow and shrink dynamically and are multiplexed onto fewer OS threads by the Go scheduler, making them efficient to create and manage.
Click to reveal answer
Which state is NOT part of the goroutine lifecycle?
ASleeping
BRunning
CWaiting
DDead
What triggers a goroutine to move from waiting to running?
ACompletion of the event it waits for
BManual restart by the programmer
CGarbage collection
DTimeout expiration only
How does the Go runtime manage many goroutines efficiently?
ABy running goroutines sequentially
BBy multiplexing goroutines onto fewer OS threads
CBy pausing all goroutines periodically
DBy creating one OS thread per goroutine
What happens to a goroutine after it finishes execution?
AIt goes back to waiting state
BIt restarts automatically
CIt enters the dead state and is cleaned up
DIt becomes a zombie process
Which of these is a reason goroutines are lightweight?
AThey run only on a single CPU core
BThey require a full OS thread each
CThey cannot communicate with each other
DThey use small, dynamically growing stacks
Describe the lifecycle of a goroutine from creation to termination.
Think about how a goroutine starts, waits, runs, and finishes.
You got /5 concepts.
    Explain why goroutines are more efficient than traditional OS threads.
    Consider resource use and scheduling.
    You got /4 concepts.

      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

      1. Step 1: Understand goroutine purpose

        A goroutine lets your program run functions concurrently, meaning at the same time.
      2. Step 2: Compare options

        Only Run multiple functions at the same time correctly describes this behavior. Other options are incorrect or unrelated.
      3. Final Answer:

        Run multiple functions at the same time -> Option D
      4. 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

      1. Step 1: Recall goroutine syntax

        In Go, prefixing a function call with go starts it as a goroutine.
      2. Step 2: Check options

        Only go doWork() uses the correct syntax: go doWork(). Others are invalid.
      3. Final Answer:

        go doWork() -> Option B
      4. 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

      1. Step 1: Understand goroutine and main flow

        The goroutine runs sayHello() concurrently, printing "Hello from goroutine". The main function prints "Main function finished" immediately.
      2. Step 2: Consider the sleep delay

        The time.Sleep pauses main to allow goroutine to run before program exits, so both prints appear.
      3. Final Answer:

        Main function finished Hello from goroutine -> Option C
      4. 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

      1. Step 1: Analyze goroutine lifecycle

        The main function starts a goroutine but then immediately exits, ending the program.
      2. Step 2: Effect on goroutine execution

        Because main exits, the goroutine may not get time to run, so "Inside goroutine" might never print.
      3. Final Answer:

        The goroutine will never run because main exits immediately -> Option A
      4. 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

      1. Step 1: Understand variable capture in goroutines

        Loop variable i changes during iterations; capturing it directly in goroutine causes all to print last value.
      2. 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.
      3. Final Answer:

        go func(n int) { fmt.Println(n) }(i) -> Option A
      4. 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 unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard