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 =  我是子协程,我工作完毕
    主协程也结束了

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

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

  • 相关阅读:
    js 笔记
    openstack笔记
    Nginx
    Nginx
    Nginx
    nginx 服务器篇
    Nginx 原理篇
    MySQL 视图、触发器、函数、存储过程
    day41
    MySQL 作业题及答案
  • 原文地址:https://www.cnblogs.com/baylorqu/p/9673479.html
Copyright © 2011-2022 走看看