当前位置: 首页 > news >正文

【Go - 每日一小问: 对未初始化的的 chan 进行读写,会怎么样?为什么?】

对未初始化的 chan 进行读写会有不同的行为:

1. 对未初始化的 chan 进行读取

  • 读取操作
    • 对未初始化的 chan 进行读取操作会导致永久阻塞(deadlock),因为没有任何 goroutine 可以向这个 chan 发送数据。
    • 读取操作会一直等待,直到有数据可读,但由于 chan 未初始化,这种情况永远不会发生。

2. 对未初始化的 chan 进行写入

  • 写入操作
    • 对未初始化的 chan 进行写入操作也会导致永久阻塞(deadlock),因为没有任何 goroutine 可以从这个 chan 读取数据。
    • 写入操作会一直等待,直到有 goroutine 读取数据,但由于 chan 未初始化,这种情况永远不会发生。

示例

package mainfunc main() {var ch chan int // 未初始化的 chan// 读取未初始化的 chan,会导致永久阻塞go func() {val := <-chprintln(val)}()// 写入未初始化的 chan,也会导致永久阻塞ch <- 1
}

为什么会这样?

  • 未初始化的 chan
    • 在 Go 中,未初始化的 chan 的零值是 nil
    • nilchan 进行读写操作会导致永久阻塞,因为没有任何 goroutine 可以与之通信。
    • 这种行为是 Go 语言设计的一部分,用于防止对未初始化的 chan 进行误操作。

总结

  • 对未初始化的 chan 进行读取操作会导致永久阻塞,因为没有数据可读。
  • 对未初始化的 chan 进行写入操作会导致永久阻塞,因为没有 goroutine 可以读取数据。
  • 这种设计确保了程序的健壮性,防止对未初始化的 chan 进行误操作。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Android笔试面试题AI答之Kotlin常见考点总结
  • 【Android】Navigation动态设置Graph和Launch参数
  • Qt详解QPropertyAnimation创建属性动画
  • SQLserver中的日期时间
  • 牛津大学发布首篇《Transformer多模态学习》综述论文,23页pdf涵盖310篇文献全面阐述MMT的理论与应用
  • 智能废弃瓶子垃圾箱:城市环境的绿色守护者
  • javascript语句之switch
  • 鸿蒙(API 12 Beta3版)【使用ImagePacker完成图片编码】图片开发指导
  • Prompt + 工作流组件 = AI智能体:开启智能化新时代
  • SBB | 南京林业大学阮宏华团队揭示人工林发育过程中土壤有机碳积累的主要机制
  • 【从问题中去学习k8s】k8s中的常见面试题(夯实理论基础)(十四)
  • 若依权限控制前端+后端实现思路梳理(PreAuthorize、hasPermi、v-hasPermi)
  • vivo手机短信删除了怎么恢复?恢复办法分享
  • Java 中的抽象工厂模式:优雅地掌握对象创建
  • vc矩阵计算(转置,点乘,逆矩阵)
  • 【Leetcode】101. 对称二叉树
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • Angular Elements 及其运作原理
  • Angular 响应式表单之下拉框
  • CentOS7简单部署NFS
  • CSS魔法堂:Absolute Positioning就这个样
  • Flex布局到底解决了什么问题
  • laravel 用artisan创建自己的模板
  • leetcode46 Permutation 排列组合
  • MobX
  • node和express搭建代理服务器(源码)
  • php的插入排序,通过双层for循环
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • Spring Boot快速入门(一):Hello Spring Boot
  • VuePress 静态网站生成
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 利用DataURL技术在网页上显示图片
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 一份游戏开发学习路线
  • 一起参Ember.js讨论、问答社区。
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • 函数计算新功能-----支持C#函数
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • # dbt source dbt source freshness命令详解
  • $.ajax,axios,fetch三种ajax请求的区别
  • (2)MFC+openGL单文档框架glFrame
  • (2)从源码角度聊聊Jetpack Navigator的工作流程
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (CVPRW,2024)可学习的提示:遥感领域小样本语义分割
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (笔记)M1使用hombrew安装qemu
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (十)Flink Table API 和 SQL 基本概念
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • .htaccess配置常用技巧
  • .NET 4.0中使用内存映射文件实现进程通讯