美文网首页
第一个goroutine + channel 程序

第一个goroutine + channel 程序

作者: 我爱张智容 | 来源:发表于2021-06-09 14:43 被阅读0次
    
    func main() {
        c := make(chan int)
    
        go func() {
            defer fmt.Println("子协程执行结束 。。。")
    
            fmt.Println("子协程 正在运行 。。。。。 ")
    
            c <- 666 // 写入通道
        }()
    
        num := <-c // 从通道中获取数据
    
        fmt.Println("num = ", num)
        
        fmt.Println("主协程执行完毕。。。")
    }
    

    无缓冲通道
    TODO: ......

    有缓冲通道
    TODO: ......

    channel 模拟 生产者和消费者

    //   chan<- //只写
    func counter(out chan<- int) {
        defer close(out)
        for i := 0; i < 5; i++ {
            out <- i //如果对方不读 会阻塞
        }
    }
    
    //   <-chan //只读
    func printer(in <-chan int) {
        for num := range in {
            fmt.Println(num)
        }
    }
    
    func main() {
        c := make(chan int) //   chan   //读写
    
        go counter(c) //生产者
        printer(c)    //消费者
    
        fmt.Println("done")
    }
    
    

    Ticker是一个定时触发的计时器,它会以一个间隔(interval)往channel发送一个事件(当前时间),而channel的接收者可以以固定的时间间隔从channel中读取事件。

    func main() {
    
        ticker := time.NewTicker(time.Second * 1)
    
        i := 0
        go func() {
    
            for {
                <-ticker.C
                i++
                fmt.Println(" i := ", i)
    
                if i == 5 {
                    ticker.Stop() // 停止定时器
                }
            }
        }()
    
        for {
        }
    }
    
    

    相关文章

      网友评论

          本文标题:第一个goroutine + channel 程序

          本文链接:https://www.haomeiwen.com/subject/oqzheltx.html