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