This commit is contained in:
Xargin
2016-09-30 21:56:19 +08:00
parent 25eec00705
commit 853e2ad052
6 changed files with 10 additions and 10 deletions

View File

@@ -8,9 +8,9 @@ func squarer(out, in chan int)
func printer(in chan int)
```
其中squarer计算平方的函数在两个串联Channels的中间因此拥有两个channels类型的参数一个用于输入一个用于输出。每个channels都用有相同的类型但是它们的使用方式一个只用于接收另一个只用于发送。参数的名字in和out已经明确表示了这个意图但是并无法保证squarer函数向一个in参数对应的channels发送数据或者从一个out参数对应的channels接收数据。
其中squarer计算平方的函数在两个串联Channels的中间因此拥有两个channels类型的参数一个用于输入一个用于输出。每个channels都用有相同的类型但是它们的使用方式一个只用于接收另一个只用于发送。参数的名字in和out已经明确表示了这个意图但是并无法保证squarer函数向一个in参数对应的channels发送数据或者从一个out参数对应的channels接收数据。
这种场景是典型的。当一个channel作为一个函数参数,它一般总是被专门用于只发送或者只接收。
这种场景是典型的。当一个channel作为一个函数参数,它一般总是被专门用于只发送或者只接收。
为了表明这种意图并防止被滥用Go语言的类型系统提供了单方向的channel类型分别用于只发送或只接收的channel。类型`chan<- int`表示一个只发送int的channel只能发送不能接收。相反类型`<-chan int`表示一个只接收int的channel只能接收不能发送。箭头`<-`和关键字chan的相对位置表明了channel的方向。这种限制将在编译期检测。