close 函数官方定义如下
close函数是一个内建函数, 用来关闭channel,这个channel要么是双向的, 要么是只写的(chan<- Type)。
这个方法应该只由发送者调用, 而不是接收者。
当最后一个发送的值都被接收者从关闭的channel(下简称为c)中接收时,
接下来所有接收的值都会非阻塞直接成功,返回channel元素的零值。
下面的代码:
close函数执行后所有读取该channel的goroutinue会收到ok为false,也就是cWait函数v, ok := <-c,中ok为false

代码如下

package main

import (
    "fmt"

    "github.com/gin-gonic/gin"
)

func cWait(c <-chan int) {
    v, ok := <-c
    if ok {
        fmt.Printf("read a int is %d\n", v)
    } else {
        fmt.Printf("read a error a int \n")
    }
}

func main() {
    c := make(chan int)
    go cWait(c)
    close(c)
    router := gin.Default()
    router.Run()

}

上面的代码输出会包含有一次 read a error a int ,如果执行N个go cWait(c),会输出N个read a error a int


lyh1091106900
1 声望0 粉丝