免费资源网 – https://freexyz.cn/
目录
- 1. 向已关闭的chan写
- 2. 向已关闭的chan读
1. 向已关闭的chan写
会直接panic,报 send to close channel错误
package main
func main() {
// 创建缓冲区为4的字符串chan
schoolChan := make(chan string, 4)
// 放入3个值
schoolChan <- "国防科大"
schoolChan <- "北京大学"
schoolChan <- "湖南大学"
// 关闭chan
close(schoolChan)
// 尝试写数据,会panic: send to close channel
schoolChan <- "中南大学"
}
2. 向已关闭的chan读
会返回2个值,若已关闭的chan中还存在值,第二个值为true,第一个值为对应的chan中的值,若已关闭的chan中不存在值,第二个值为false,第一个值为对应chan类型的零值
package main
import "fmt"
func main() {
// 创建缓冲区为4的字符串chan
schoolChan := make(chan string, 4)
// 放入3个值
schoolChan <- "国防科大"
schoolChan <- "北京大学"
schoolChan <- "湖南大学"
// 关闭chan
close(schoolChan)
// 向已关闭的chan读
if school, isEmpty := <-schoolChan; isEmpty {
fmt.Println("school:", school)
}
// 向已关闭的chan读
if school, isEmpty := <-schoolChan; isEmpty {
fmt.Println("school:", school)
}
// 向已关闭的chan读
if school, isEmpty := <-schoolChan; isEmpty {
fmt.Println("school:", school)
}
// 向若chan不存在元素,则第二个参数的值为 false
if school, isEmpty := <-schoolChan; isEmpty {
fmt.Println("school:", school)
}
}
使用for循环遍历chan,若chan未关闭则会堵塞等待chan放入元素,如chan关闭则取出chan内所有元素并终止循序
package main
import (
"fmt"
)
func main() {
// 创建缓冲区为4的字符串chan
schoolChan := make(chan string, 4)
// 放入3个值
schoolChan <- "国防科大"
schoolChan <- "北京大学"
schoolChan <- "湖南大学"
// 关闭chan
close(schoolChan)
// for循环遍历channel,会将已关闭的chan中缓冲区的数据取出完后终止循序
for school := range schoolChan {
fmt.Println("school:", school)
}
}
免费资源网 – https://freexyz.cn/
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

评论(0)