【Go - 每日一小问: 对已经关闭的的 chan 进行读写,会

2024-08-25  本文已影响0人  wn777

对已经关闭的 chan 进行读写会有不同的行为:

1. 对已关闭的 chan 进行读取

package main

import (
    "fmt"
)

func main() {
    ch := make(chan int, 2)
    ch <- 1
    ch <- 2
    close(ch)

    // 读取已关闭的 chan
    for i := 0; i < 3; i++ {
        val, ok := <-ch
        fmt.Printf("val: %d, ok: %v\\n", val, ok)
    }
}

输出:

val: 1, ok: true
val: 2, ok: true
val: 0, ok: false

2. 对已关闭的 chan 进行写入

package main

func main() {
    ch := make(chan int, 2)
    close(ch)

    // 对已关闭的 chan 进行写入
    ch <- 1 // 这行代码会导致 panic
}

运行时会出现以下错误:

panic: send on closed channel

为什么会这样?

总结

上一篇 下一篇

猜你喜欢

热点阅读