• golang学习笔记——Channel


    Channel通道
    • 无缓存通道  make(chan type类型)   注意:读和写都是阻塞执行的
    package main
     
    import (
        "fmt"
        "time"
    )
     
    var ch = make(chan int)
     
    func Printer(str string) {
        for _, data := range str {
             fmt.Printf("%c", data)
             time.Sleep(time.Second)
        }
        fmt.Printf(" ")
    }
     
    func Person1() {
        Printer("hello")
        ch <- 7
    }
     
    func Person2() {
        <-ch //通道中获取不到数据时会阻塞等待
        Printer("world")
    }
     
     
    func main() {
        go Person1()
        go Person2()
     
        for {
        }
    }
     
    • 有缓存通道 make(chan type类型,容量)   注意:当channel中空间未满时是异步非阻塞
    var ch = make(chan int,10)
     
    • 关闭channel  close()  注意:关闭后只能够读数据不能够写数据
    package main
     
    import (
        "fmt"
    )
     
    func main() {
        ch := make(chan int)
     
        go func() {
             for i := 0; i < 5; i++ {
                     ch <- i
             }
             close(ch)
        }()
     
        for {
             if k, ok := <-ch; ok == true { //通过 ok 判断通道是否关闭
                     fmt.Println(k)
             } else {
                     break
             }
        }
     
        //可以使用 range 读取通道中的数据,通道关闭后自动跳出循环
        for num := range ch {
             fmt.Println(num)
        }
     
    }
     
    • 单向通道   make(chan<- type) 只写通道    make(<-chan int) 只读通道  注意:普通通道可以转为单向通道,单向不可以转为普通
    package main
     
    import (
        "fmt"
    )
     
    func producer(out chan<- int) {
        for i := 0; i < 5; i++ {
             out <- i * i
        }
        close(out)
    }
     
    func consumer(in <-chan int) {
        for num := range in {
             fmt.Println(num)
        }
    }
     
    func main() {
        ch := make(chan int)
     
        go producer(ch)
     
        consumer(ch)
    }
     
     
     
     
  • 相关阅读:
    学习java第8课:idea新建项目
    学习java第9课:IDEA注释
    淘宝专业术语
    学习java第2课:电脑常用快捷键
    学习java第7课:初识idea
    学习java第5课:java程序运行机制
    学习java第6课:Hello,World!
    学习java第4课:java 安装卸载
    学习java第3课;dos命令
    odoo命名规范及常用函数
  • 原文地址:https://www.cnblogs.com/itsuibi/p/14471451.html
Copyright © 2020-2023  润新知