zoukankan      html  css  js  c++  java
  • channel

    1.what‘s chanel?

      信道是什么?简单说,是goroutine之间互相通讯的东西。类似我们Unix上的管道(可以在进程间传递消息), 用来goroutine之间发消息和接收消息。其实,就是在做goroutine之间的内存共。

    2.hot to use?

      example: 

    package main
    
    import (
    	"fmt"
    	"time"
    )
    
    func main() {
    
    	a := make(chan int)
    	go func(){
    		for i:=0; i<= 5; i++{
    			a<-i
    			time.Sleep(time.Second * 1)
    		}
    		close(a)
    	}()
    	go func(){
    		for {
    			select {
    			case x, ok := <- a :
    				if ok{
    					fmt.Println(x)
    					time.Sleep(time.Second * 2)
    				}else{
    					fmt.Println("over")
    					return
    				}
    
    			}
    		}
    	}()
    
    	time.Sleep(time.Second * 15)
    
    }
    

      

    3.trouble shouting

      1fatal error: all goroutines are asleep - deadlock!

    package main
    
    import (
        "fmt"
        "time"
    )
    
    func main() {
    
        a := make(chan int)
        //go func(){
            for i:=0; i<= 5; i++{
                a<-i
                time.Sleep(time.Second * 1)
            }
            close(a)
        //}()
        go func(){
            for {
                select {
                case x, ok := <- a :
                    if ok{
                        fmt.Println(x)
                        time.Sleep(time.Second * 2)
                    }else{
                        fmt.Println("over")
                        return
                    }
    
                }
            }
        }()
    
        time.Sleep(time.Second * 15)
    
    }

      a 为非缓冲的channel,在main方法的主线程中输入第一个数据的时候,channe阻塞,直接挂起。导致程序无法进行下去。然后报错。

      正确的使用channel是有发有收。

    没有什么是写一万遍还不会的,如果有那就再写一万遍。
  • 相关阅读:
    ipad 横屏 竖屏 CSS
    播放多个音视频文件
    插入百度地图
    js getByClass函数封装
    jq 测试是否到页面最底端
    python字符串跟整型互转
    day01-day04总结- Python 数据类型及其用法
    斐波那契数列的非递归
    LeetCode: 3SumClosest
    LeetCode: 3Sum
  • 原文地址:https://www.cnblogs.com/waken-captain/p/9790818.html
Copyright © 2011-2022 走看看