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