美文网首页
golang chanel疑惑

golang chanel疑惑

作者: frank3 | 来源:发表于2018-05-11 14:42 被阅读0次

    今天看golang chan发现了一个奇怪的问题,就是1.同样的不带缓存chanel,已有数据关闭和没有数据关闭,不一样? 2. 带缓存和不带缓存的chan,已有数据关闭,也不一样?

    // Copyright. All rights reserved.
    
    
    
    package main
    
    import (
        "fmt"
        "time"
        "flag"
    )
    
    func main() {
        c := flag.Int("c", 0, "choose")
        flag.Parse()
    
        var ch chan int
        if *c == 0 || *c == 2 {
            ch = make(chan int)
        }else if *c == 1 {
            ch = make(chan int, 1)
        }
    
    
        go func() {
            select {
            case v, ok  := <- ch:
                fmt.Println("1 close ", v, ok)
                return
            default:
                fmt.Println("1 defaul")
            }
        }()
    
        go func() {
            select {
            case v, ok  := <- ch:
                fmt.Println("3 close ", v, ok)
                return
            default:
                fmt.Println("2 defaul")
            }
        }()
    
        go func() {
            select {
            case v, ok  := <- ch:
                fmt.Println("3 close ", v, ok)
                return
            default:
                fmt.Println("3 defaul")
            }
        }()
    
        go func() {
            select {
            case v, ok  := <- ch:
                fmt.Println("4 close ", v, ok)
                return
            default:
                fmt.Println("4 defaul")
            }
        }()
    
        if *c != 2 {
            ch <- 3
        }
    
        close(ch)
        time.Sleep(time.Second)
    
    }
    

    输出结果:

    ➜  golearn git:(master) ✗ ./chan -c 1
    4 close  0 false
    3 close  3 true
    1 close  0 false
    3 close  0 false
    ➜  golearn git:(master) ✗ ./chan -c 0
    4 close  3 true
    2 defaul
    1 defaul
    3 defaul
    ➜  golearn git:(master) ✗ ./chan -c 2
    4 close  0 false
    1 close  0 false
    3 close  0 false
    3 close  0 false
    

    问题原因还在寻找中................ 欢迎高手指点

    相关文章

      网友评论

          本文标题:golang chanel疑惑

          本文链接:https://www.haomeiwen.com/subject/gjpfdftx.html