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 main
import (
"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
package main
import (
"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讲
<<: IP资料单元(Datagram)或封包(Packet)?
>>: [JS] You Don't Know JavaScript [this & Object Prototypes] - Object [番外 - getter/setter]
服用注意:本篇绝对不是在教你如何21天养成一个计划、或戒掉什麽拖延症、还是什麽断舍离的文章! 上述这...
建立第一份html文件,需要注意一些细节 如没宣告加上!doctype html会导致浏览器解读功...
Virtual Memory tags: IT铁人 跟上一篇有点关系的内容,我们会利用Disk来代替...
todos: 还在出去玩,之後补上演算法 pesudocode + comments 8.2 提到的...
【YC的寻路青春】 架设好elk之後,除了kibana可以看以外 想要做及时的警报系统 我们这边选择...