📖 Scenario: You are building a simple Go program that uses channels to communicate between goroutines. Channels are like pipes that let you send and receive data safely between different parts of your program.
🎯 Goal: Create a Go program that sets up a channel to send and receive integer values.
📋 What You'll Learn
Create a channel of type int called numbers
Create a variable called bufferSize and set it to 3
Use the make function with bufferSize to create a buffered channel
Print the channel variable numbers to show it was created
💡 Why This Matters
🌍 Real World
Channels are used in Go programs to safely pass data between different parts of a program running at the same time.
💼 Career
Understanding channels is important for Go developers working on concurrent or parallel applications, such as web servers or data processing pipelines.
Progress0 / 4 steps
1
Create a channel variable
Create a channel variable called numbers of type chan int without initializing it.
Go
Hint
Use var numbers chan int to declare a channel variable without creating it yet.
2
Add a buffer size variable
Create an integer variable called bufferSize and set it to 3.
Go
Hint
Use bufferSize := 3 to create and set the variable in one line.
3
Initialize the buffered channel
Use the make function with bufferSize to create a buffered channel and assign it to numbers.
Go
Hint
Use numbers = make(chan int, bufferSize) to create a buffered channel.
4
Print the channel variable
Write a fmt.Println statement to print the numbers channel variable.
Go
Hint
Use fmt.Println(numbers) to print the channel. The output will show the channel's memory address.
Practice
(1/5)
1. What is the correct way to create an unbuffered channel of integers in Go?
easy
A. ch := chan int{}
B. ch := new(chan int)
C. ch := make(chan int)
D. ch := make(int chan)
Solution
Step 1: Understand channel creation syntax
Channels are created using the built-in make function with the syntax make(chan Type).
Step 2: Identify the correct option
ch := make(chan int) uses make(chan int), which is the correct syntax for an unbuffered integer channel.
Final Answer:
ch := make(chan int) -> Option C
Quick Check:
make(chan int) = correct channel creation [OK]
Hint: Use make(chan Type) to create channels in Go [OK]
Common Mistakes:
Using new(chan int) instead of make
Incorrect syntax like chan int{}
Swapping order in make(int chan)
2. Which of the following creates a buffered channel of strings with capacity 5?
easy
A. ch := make(chan string, cap=5)
B. ch := make(chan string, 5)
C. ch := make(chan string, "5")
D. ch := make(chan string)
Solution
Step 1: Recall buffered channel syntax
Buffered channels are created by passing a second argument to make, which is the capacity (an integer).
Step 2: Identify the correct option
ch := make(chan string, 5) correctly uses make(chan string, 5) to create a buffered string channel with capacity 5.
Final Answer:
ch := make(chan string, 5) -> Option B
Quick Check:
make(chan string, 5) = buffered channel [OK]
Hint: Add capacity as second arg in make for buffered channels [OK]
The channel has capacity 2, so it can hold two values without blocking. Values 10 and 20 are sent in order.
Step 2: Read values from channel in FIFO order
Receiving from the channel returns values in the order sent: first 10, then 20.
Final Answer:
10
20 -> Option A
Quick Check:
Buffered channel FIFO order = 10 then 20 [OK]
Hint: Buffered channels output values in send order (FIFO) [OK]
Common Mistakes:
Assuming output reverses order
Expecting runtime or compile error
Confusing buffered with unbuffered channel behavior
4. Identify the error in this Go code snippet:
ch := make(chan int)
ch <- 5
fmt.Println(<-ch)
medium
A. Deadlock: sending on unbuffered channel without receiver
B. Syntax error in channel creation
C. Cannot print channel value directly
D. No error, code runs fine
Solution
Step 1: Analyze unbuffered channel send
Unbuffered channels block the sender until a receiver is ready. Here, send happens before receive.
Step 2: Identify deadlock situation
Since no goroutine is receiving concurrently, the send blocks forever causing deadlock.
Final Answer:
Deadlock: sending on unbuffered channel without receiver -> Option A
Quick Check:
Unbuffered send blocks without receiver = deadlock [OK]
Hint: Unbuffered send blocks until receive happens [OK]
Common Mistakes:
Thinking code compiles but runs fine
Confusing syntax error with runtime deadlock
Assuming print causes error
5. You want to create a channel that can hold up to 3 float64 values without blocking the sender immediately. Which code snippet correctly does this and sends three values safely?