Golang – 在struct中使用chan slice

Golang – 在struct中使用chan slice,第1张

概述我试图在结构中使用切片chan类型,类似于下面的代码. 但是,当我尝试接收时 test := <-c.slice 该程序挂起.有没有办法做到这一点? package mainimport "fmt"type blah struct { slice chan [][]int}func main() { slice := make([][]int, 3) c : 我试图在结构中使用切片chan类型,类似于下面的代码.
但是,当我尝试接收时
test := <-c.slice

该程序挂起.有没有办法做到这一点?

package mainimport "fmt"type blah struct {    slice chan [][]int}func main() {    slice := make([][]int,3)    c := blah{make(chan [][]int)}    slice[0] = []int{1,2,3}    slice[1] = []int{4,5,6}    slice[2] = []int{7,8,9}    go func() {        test := <- c.slice        test = slice        c.slice <- test    }()    fmt.Println(<-c.slice)}
goroutine中的第一行从通道接收,在创建goroutine之后,main中的第一行也是如此.这意味着系统中只有两个goroutine都试图从切片通道接收,没有人试图发送它.

更一般地说,问题是对于某人接收(消费),其他人必须同时发送(生产).如果通道是缓冲的(在您的示例中不是这种情况),则发送也可能在同一个goroutine中提前发生.

所以这很有用,例如,因为通道有一个元素的缓冲区,这意味着发送不会阻塞:

ch := make(chan int,1)ch <- 1i := <-ch

这也有效,因为发送与接收同时发生:

ch := make(chan int)go func() { ch <- 1 }()i := <-ch

这不起作用,因为两个goroutine都试图发送到一个无缓冲的通道,没有人试图接收:

ch := make(chan int)go func() { ch <- 1 }()ch <- 2

这也不起作用,因为两个goroutine都试图接收,没有人试图发送:

ch := make(chan int)go func() { <-ch }()<-ch

最后一个是你的情况.

总结

以上是内存溢出为你收集整理的Golang – 在struct中使用chan slice全部内容,希望文章能够帮你解决Golang – 在struct中使用chan slice所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1293774.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-10
下一篇 2022-06-10

发表评论

登录后才能评论

评论列表(0条)

保存