乐趣区

关于golang:golang-close-函数的行为

close 函数官网定义如下
close 函数是一个内建函数,用来敞开 channel,这个 channel 要么是双向的,要么是只写的(chan<- Type)。
这个办法应该只由发送者调用,而不是接收者。
当最初一个发送的值都被接收者从敞开的 channel(下简称为 c)中接管时,
接下来所有接管的值都会非阻塞间接胜利,返回 channel 元素的零值。
如下的代码:
如果 c 曾经敞开(c 中所有值都被接管),x, ok := <- c,读取 ok 将会失去 false。


close 函数再执行后 chan 会接管到一次,x, 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

退出移动版