免费资源网 – 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)