zoukankan      html  css  js  c++  java
  • 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)
    }
     
     
     
     
  • 相关阅读:
    贝叶斯网路的采样
    马尔可夫蒙特卡洛采样法
    高斯分布的采样
    常见的采样方法
    正则化
    随机梯度下降
    机器学习中的优化问题
    【原】涉及数据库的单元测试-JTeser
    高度和宽度
    定位position
  • 原文地址:https://www.cnblogs.com/itsuibi/p/14471451.html
Copyright © 2011-2022 走看看