码迷,mamicode.com
首页 > 其他好文 > 详细

golang---channel

时间:2020-01-29 22:03:44      阅读:64      评论:0      收藏:0      [点我收藏+]

标签:cto   file   turn   目录结构   pack   main   second   golang   demo   

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

4. 同步

package main

import (
    "fmt"
    "time"
)

func main() {
    fmt.Println("Begin...")

    Done := make(chan bool, 1)
    go SyncWorker(Done)
    <-Done
}

func SyncWorker(done chan<- bool) {
    time.Sleep(time.Second * 2)

    done <- true
}

golang---channel

标签:cto   file   turn   目录结构   pack   main   second   golang   demo   

原文地址:https://www.cnblogs.com/double12gzh/p/12241097.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!