jeffreyguan@jeguan ~/main$ tree                                                                                                                                                                
.
├── channel
│?? └── woker.go
├── go.mod
└── main.go
1 directory, 3 files
package main
import (
    "fmt"
    "main/channel"
)
func main() {
    fmt.Println("Begin...")
    // demo1
    //channel.ChanDemo()
    //  demo2
    channel.ChanDemo2()
}
package channel
import (
    "fmt"
    "time"
)
// begin: demo1
func ChanDemo() {
    var channels [10]chan int
    for i := 0; i < 10; i++ {
        channels[i] = make(chan int)
        go Worker(i, channels[i])
    }
    for i, c := range channels {
        c <- 'a' + i
    }
    time.Sleep(time.Minute)
}
func Worker(id int, c chan int) {
    for {
        fmt.Printf("Worker %d received %d\n", id, <-c)
    }
}
// end: demo1
// begin: demo2
func ChanDemo2() {
    var channels [10]chan<- int
    for i := 0; i < 10; i++ {
        channels[i] = CreateWorker(i)
    }
    for i, c := range channels {
        c <- 'a' + i
    }
    time.Sleep(time.Minute)
}
func CreateWorker(id int) chan<- int {
    c := make(chan int)
    go func() {
        fmt.Printf("Worker %d received %c\n", id, <-c)
    }()
    return c
}
// end: demo2
原文:https://www.cnblogs.com/double12gzh/p/12241097.html