为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 <-chan 和 chan<- 进行定向通信?

如何使用 <-chan 和 chan<- 进行定向通信?

Go
小怪兽爱吃肉 2021-09-10 15:19:24
我正在努力了解 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
提交
取消
意见反馈 帮助中心 APP下载
官方微信