素数筛的实现中,chan作为参数的时候加了 赋值方向的符号(<- ,->),但是我去掉了运行效果是一样的,加这个符号主要是什么作用呢?
ximen · 2017-08-30 07:01:28 · 1319 次点击好像是这个意思
var ch chan int
var ch1 chan<- int //ch1只能写
var ch2 <-chan int //ch2只能读
更多评论
你这里没有区分发送和接收
package main
import (
"fmt"
"sync"
)
// 通道默认是双向的, 不区分发送和接收端
// 某些时候我们可以限制手发操作的方向
// 尽管可以用make创建单向通道, 没有任何意义
// 通常使用类型转换来获取单向通道, 并分别赋予操作双方
func main() {
var wg sync.WaitGroup
wg.Add(2)
c := make(chan int)
var send chan <- int = c
var recv <- chan int = c
go func() {
defer wg.Done()
for x := range recv {
fmt.Println(x)
}
}()
go func() {
defer wg.Done()
defer close(c)
for i := 0; i < 100; i ++ {
send <- i
}
}()
wg.Wait()
}