浅析Golang如何向已关闭的chan读写数据

2024-03-01 0 726
目录
  • 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结构体源码和读写和关闭过程详解

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悠久资源 Golang 浅析Golang如何向已关闭的chan读写数据 https://www.u-9.cn/jiaoben/golang/179373.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务