关闭2次

复制代码 代码如下:

ch := make(chan bool)

close(ch)

close(ch)  // 这样会panic的,channel不能close两次

读取的时候channel提前关闭了


复制代码 代码如下:

ch := make(chan string)

close(ch)

i := <- ch // 不会panic, i读取到的值是空 “”,  如果channel是bool的,那么读取到的是false

向已经关闭的channel写数据


复制代码 代码如下:

ch := make(chan string)

close(ch)

ch <- “good” // 会panic的

判断channel是否close


复制代码 代码如下:

i, ok := <- ch

if ok {

    println(i)

} else {

    println(“channel closed”)

}

for循环读取channel


复制代码 代码如下:

for i := range ch { // ch关闭时,for循环会自动结束

    println(i)

}

防止读取超时


复制代码 代码如下:

select {

    case <- time.After(time.Second*2):

        println(“read channel timeout”)

    case i := <- ch:

        println(i)

}

防止写入超时


复制代码 代码如下:

// 其实和读取超时很像

select {

    case <- time.After(time.Second *2):

        println(“write channel timeout”)

    case ch <- “hello”:

        println(“write ok”)

}

声明:本站(华域联盟www.cnhackhy.com)所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。