chan可以被关闭,尽管它们和文件不同,不必每次都关闭
package main
import (
"fmt"
"time"
)
func main() {
ch := make(chan string)
go sendData(ch)
go getData(ch)
time.Sleep(1e9)
}
func sendData(ch chan string) {
ch <- "北京"
ch <- "上海"
ch <- "广州"
ch <- "武汉"
ch <- "乌海"
}
func getData(ch chan string) {
var input string
for {
input = <-ch
fmt.Printf("%s", input)
}
}
如何在通道的sendData()完成的时候发送一个信号,getData()又如何检测到通道是否关闭或者阻塞
第一种方法可以通过函数close(ch)来完成,将这个通道标记为无法通过发送操作接收更多的值;给已关闭的通道发送或者再次关闭都会导致painc。
ch :=make(chan float64) defer close(ch