Golang开发必知:对已关闭chan读写会怎样及背后原理!
在Go语言中,如果尝试对已经关闭的通道(chan)进行读写操作,会引发panic错误。 关闭通道的目的是告知其他正在进行读取的goroutine,该通道不再有更多数据可供读取。一旦通道关闭,任何尝试对通道进行读取或写入的操作都会失败。 读取已关闭的通道会立即引发panic错误,而写入已关闭的通道则不会立即引发错误。写入操作会立即阻塞,并且不会导致panic错误。这是因为关闭通道后,仍然可以继续向通道中写入数据,但是无法从通道中读取数据。 以下是一个示例代码,演示了关闭通道后进行读写操作的结果: ```go package main import "fmt" func main() { ch := make(chan int) go func() { ch <- 10 // 写入数据到通道 close(ch) // 关闭通道 }() // 尝试读取通道中的数据 if val, ok := <-ch; ok { fmt.Println("读取到数据:", val) // 正常情况会输出"读取到数据: 10" } else { fmt.Println("通道已关闭") // 正常情况会输出"通道已关闭" } // 尝试写入通道中的数据 ch <- 20 // 此处会引发panic错误,因为通道已关闭 } ``` 在上述示例中,我们创建了一个通道`ch`,然后在一个goroutine中将数据10写入通道,并随后关闭通道。在主goroutine中,我们尝试从通道中读取数据并输出,然后尝试向通道中写入数据20。由于通道已经关闭,尝试写入数据20的操作会引发panic错误。 ######[AI写代码神器 | 385点数解答 | 2023-11-09 18:14:50]
- 揭秘Go语言 chan:底层数据结构剖析与主要使用场景大盘点(百度文心 | 561点数解答 | 2023-11-09 18:12:46)147
- 探秘 Linux sensors 原理:从硬件读取到数据监测的全面剖析(GPT | 407点数解答 | 2024-10-21 16:06:25)265
- Java 状态模式:模拟 TCP 连接多种状态及行为转换(GPT | 2147点数解答 | 2024-12-19 22:19:37)294
- Java实现状态模式:模拟TCP连接状态管理及行为处理(GPT | 1541点数解答 | 2024-12-19 22:19:57)282
- 深度剖析:Go语言中 make 与 new 函数的区别(百度文心 | 346点数解答 | 2023-11-09 18:10:41)371
- Golang开发必知:数组与切片的五大区别及适用场景(百度文心 | 270点数解答 | 2023-11-09 18:10:41)263
- Golang开发必知:单引号、双引号与反引号在字符串表示上的区别(百度文心 | 214点数解答 | 2023-11-09 18:10:50)287
- Golang开发:调用函数传入结构体,传值还是指针?一文说清!(百度文心 | 478点数解答 | 2023-11-09 18:12:10)241
- Golang开发必备:sync.Map用法全解析与示例展示(百度文心 | 408点数解答 | 2023-11-09 18:12:12)260
- Golang开发必看:用反射机制实现结构体标签解析示例及性能提醒(百度文心 | 456点数解答 | 2023-11-09 18:12:12)268
- Go语言map使用全解析:初始化、并发安全及内存管理要点(百度文心 | 396点数解答 | 2023-11-09 18:14:06)242
- Go语言 uint 类型溢出问题全解析:原因、示例与避免方法(百度文心 | 539点数解答 | 2023-11-09 18:14:06)293