我正在努力了解 Go 的频道。我想我了解基本的双向chan但我在理解<-chan和chan<-.我希望它们对于以一种方式与线程进行通信很有用,但我在线程实际读取和接收值时遇到了问题。package mainimport ( "fmt" "time")func Thread(c chan<- int) { for { num := <-c fmt.Println("Thread : ", num) time.Sleep(time.Second) }}func main() { c := make(chan<- int, 3) go Thread(c) for i := 1; i <= 10; i++ { c <- i } for len(c) > 0 { time.Sleep(100) }}我试过使用<-chan而不是chan<-inmake()但同样的事情发生了:C:\>go run chan.go# command-line-arguments.\chan.go:10: invalid operation: <-c (receive from send-only type chan<- int)如果我无法从频道中读取,何必写信呢?带着这个想法,我想我一定是做错了什么。我期望chan只发送意味着一个线程只能发送而另一个线程只能接收。情况似乎并非如此。如果我<-完全删除它,它会起作用,但这将使其双向允许 go 例程响应(即使它从未响应),我希望避免这种情况。似乎我可以将数字排除chan在我永远无法读取的数字中,或者我可以从chan无法写入的数字中读取。我希望做的是将整数从主线程发送到 go 例程,以便它使用单向通道进行打印。我究竟做错了什么?如果重要的话,这是 Windows 上的 go 1.3.3。更新到 1.4 没有帮助。我可能想提一下这也是 x64。
1 回答
- 1 回答
- 0 关注
- 390 浏览
添加回答
举报
0/150
提交
取消