If Goroutines are the way to run tasks concurrently, then Channels are the way they talk/exchange data with each other.
Analogy
Imagine Goroutines as relay runners. A Channel is the baton passed from one runner to another.
Rules
channel <- datadata <- channelMAIN.GO
package mainimport "fmt"func main() { // Create a channel that carries string type data messages := make(chan string) // Anonymous Goroutine sending data go func() { messages <- "Hello from Goroutine!" }() // Main thread waits for data to arrive (Blocking) msgContent := <-messages fmt.Println(msgContent)}