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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。