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
发表回复