Golang (Go) Tutorial - Channels - Communication
๐ก Channels - Goroutines Ko Connect Karo
๐ Real Life Analogy:
๐ WhatsApp Chat:
Person A sends โ Channel โ Person B receives
Two goroutines communicate karne ka raasta!
๐ญ Factory Assembly Line:
Worker 1 โ Conveyor belt โ Worker 2
Channel = Conveyor belt (data transfer karta)
๐ฌ Post Office:
Sender โ Mailbox (channel) โ Receiver
๐ฏ Channel Kya Hai?
- Goroutines ke beech communication
- Data safely transfer karo
- Synchronization automatically
- Type-safe (sirf ek type ka data)
๐ Channel Syntax
Create & Use
// Create channel
ch := make(chan int)
// Send data (arrow towards channel)
ch <- 42
// Receive data (arrow from channel)
value := <-ch
๐ Channel Types
| Type | Description | Example |
|---|---|---|
| Unbuffered | Direct handoff | make(chan int) |
| Buffered | Queue with capacity | make(chan int, 5) |
| Send-only | chan<- int | Only send |
| Receive-only | <-chan int | Only receive |
๐ Unbuffered vs Buffered
Unbuffered Channel
Analogy: Phone call - dono ka saath hona zaroori
ch := make(chan int)
// Sender waits until receiver ready
Buffered Channel
Analogy: Mailbox - chhod do, baad mein le lenge
ch := make(chan int, 3) // 3 messages store kar sakta
// Up to 3 sends without waiting
โ ๏ธ Deadlock Warning!
Agar send kiya lekin receive nahi โ Program hang!
Always ensure receiver exists for sender.
๐ก Common Patterns
1. Producer-Consumer
// Producer
go func() {
ch <- data
}()
// Consumer
result := <-ch
2. Select Statement (Multiple Channels)
select {
case msg1 := <-ch1:
// Handle ch1
case msg2 := <-ch2:
// Handle ch2
case <-time.After(1 * time.Second):
// Timeout
}
Example
ch := make(chan int)
ch <- 42 // Send
value := <-ch // Receive