目录
- 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)
}
}
到此这篇关于浅析Golang如何向已关闭的chan读写数据的文章就介绍到这了,更多相关Go向已关闭chan读写数据内容请搜索悠久资源网以前的文章或继续浏览下面的相关文章希望大家以后多多支持悠久资源网!
您可能感兴趣的文章:
- golang chan传递数据的性能开销详解
- Golangchannel关闭的实现示例
- Go channel实现批量读取数据
- Go channel结构体源码和读写和关闭过程详解