我用Go语言编写程序,我有一个简单的问题:
我的程序和通道中有一些goroutines,goroutines用它来进行通信。我不时想查看频道内的内容。如何在不中断goroutines的情况下实现这一目标。工作?频道是否有任何打印内容的功能?或者我应该以某种方式复制它们?
var shelf chan int = make(chan int, 5)
go Depot(shelf)
go Shop(shelf)
var input string
fmt.Scanln(&input)
if (input == "print") {
//here print what on shelf
}
答案 0 :(得分:5)
如果不打断goroutines的工作,我怎么能实现这一目标呢?
简单的答案是,你不能不打扰。通道是同步原语,这意味着它们使并发程序能够安全地进行通信。如果你从某个频道中取出某些内容,那么“取出”会以原子方式发生,没有其他人可以从同一频道中取出相同的内容。这是有意的。
您可以做的是将物品取出并在打印后将其放回原处。这种方法的问题在于,某些元素可能永远不会被打印而其他元素可能会被打印多次,因为所有涉及的goroutine都会竞争从频道中抓取项目。
听起来你需要别的东西而不是频道。