golang---channel

0. 参考

  • https://colobu.com/2016/04/14/Golang-Channels/

1. 目录结构

jeffreyguan@jeguan ~/main$ tree                                                                                                                                                                
.
├── channel
│   └── woker.go
├── go.mod
└── main.go

1 directory, 3 files

2. main.go

package main

import (
    "fmt"
    "main/channel"
)

func main() {
    fmt.Println("Begin...")
    // demo1
    //channel.ChanDemo()

    //  demo2
    channel.ChanDemo2()
}

3. channel.go

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

猜你喜欢

转载自www.cnblogs.com/double12gzh/p/12241097.html