zoukankan      html  css  js  c++  java
  • [GO]channel实现数据交互

    package main
    
    import (
        "fmt"
        "time"
    )
    
    func main() {
        ch := make(chan string)//创建channel
    
        defer fmt.Println("主协程也结束了")
    
        go func() {
            defer fmt.Println("子协程调用完毕")
            for i:=0; i<2; i++  {
                fmt.Println("子协程i = ", i)
                time.Sleep(time.Second)
            }
            ch <- "我是子协程,我工作完毕"
        }()
        str := <-ch//没有数据之前它会一直阻塞这里
        fmt.Println("str = ", str)
    }

    执行的结果

    子协程i =  0
    子协程i =  1
    子协程调用完毕
    str =  我是子协程,我工作完毕
    主协程也结束了

    主协程和子协程近乎是同时执行,但是主协程因为有了管道的阻塞所以一直都不会执行打印

    子协程在执行过自己的循环之后才会对管道进行一个写值,这时主协程一旦看到管道里有值就会立刻执行下面的程序

  • 相关阅读:
    3步学会用gulp
    div需要重置吗?
    HTML元素遮挡Flash之梦
    移动WEB开发常用技巧
    四:分组查询
    三:函数
    二:查询
    一:MySQL
    三:JVM(重点)
    二:JAVA通知唤醒机制,Lock替换synchronize
  • 原文地址:https://www.cnblogs.com/baylorqu/p/9673479.html
Copyright © 2011-2022 走看看