[Golang]单向channel介绍

1. channel有分,单向、双向,通常情况下,只说channel,就是指双向channel。
那如何声明单向通道?

var Chan = make(chan<- int, 1)

2. 在channel的宣告中,加入 <-,代表channel的方向

var sendChan = make(chan<- int, 1) //发送通道,只能发不能收var recvChan = make(<-chan int, 1) //接收通道,只能收不能发

3. 单向通道的用途: 对其它程式码(呼叫方)的约束
程式码延伸知识点:
a. channel的关闭,尽量由sender端做。
b. 带有range的for语句。for语句会不断尝试从 intChan 取出元素值,即使intChan被close,它还是会在取出所有剩余的元素值后,在结束执行。
c. 带有range的for语句。当intChan中没有元素值,它会永远阻塞在for的那一行。
d. 带有range的for语句。如果当intChan的值为nil,那它会永远阻塞在for的那一行。

package mainimport ("fmt")func main() {  intChan := SendIntChan()  for v := range intChan {    fmt.Printf("The value in intChan: %d\n", v)  }}//返回 <-chan int 类型的 channel//呼叫方,只能从channel接收元素值func SendIntChan() <-chan int {  num := 5  ch := make(chan int, num)  for i := 0; i < num; i++ {    ch <- i  }  close(ch)  return ch}

https://play.golang.org/p/a9Gw_ZJgL0b

c 範例。(阻塞在for那一行)
package mainimport ("fmt")func main() {  intChan := SendIntChan()  for v := range intChan {    fmt.Printf("The value in intChan: %d\n", v)  }}func SendIntChan() <-chan int {  ch := make(chan int, 5)  return ch}

https://play.golang.org/p/J_-OaR8UZ9X
参考来源:
郝林-Go语言核心36讲


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章