zoukankan      html  css  js  c++  java
  • go channel

    创建channel

    可以通过make函数来创建channel,channel是引用类型,空值为nil

    ch := make(chan int)
    

    close channel

    使用close函数关闭channel之后,后续的发送调用都会panic,后续的接收调用都会收到空值,可以用下面的语法判断channel是否被关闭:

    value, ok := <- ch
    

    使用for range语法可以自动判断channel是否已经关闭

    func main() {
    	naturals := make(chan int)
    	squares := make(chan int)
    	// Counter
    	go func() {
    		for x := 0; x < 100; x++ {
    			naturals <- x
    		}
    		close(naturals)
    	}()
    	// Squarer
    	go func() {
    		for x := range naturals {
    			squares <- x * x
    		}
    		close(squares)
    	}()
    	// Printer (in main goroutine)
    	for x := range squares {
    		fmt.Println(x)
    	}
    }
    

    close一个已经close的channel,或者nilchannel时,都会引起panic

    channel复用

    go中提供select语法,可以对channel进行复用,效果就跟C++中对IO操作复用一样:

    func main() {
    	ch := make(chan int, 1)
    	for {
    		select {
    		case ch <- 0:
    		case ch <- 1:
    		}
    		i := <-ch
    		fmt.Println(i)
    	}
    }
    

    select随机选择一个就绪的可读或者可写的channel执行,如果都没有就绪就会陷入等待,上面的代码会随机输出0和1的序列。

  • 相关阅读:
    面试常考知识点——Java(JVM,JDK,JRE)
    使用CSS transform属性的skewX、skewY沿X、Y轴倾斜元素
    视觉设计应用
    小程序
    小程序获取用户的登录头像和用户名
    整站建设
    2018-05-05(在小程序中使用图标)
    2018-05-03(PHP)
    webpack
    简历
  • 原文地址:https://www.cnblogs.com/HachikoT/p/14117521.html
Copyright © 2011-2022 走看看