gpt4 book ai didi

go - 如何在不更改 channel 的情况下打印 channel 内容

转载 作者:IT王子 更新时间:2023-10-29 00:59:21 25 4
gpt4 key购买 nike

我正在用 Go 语言编写程序,遇到一个简单的问题:

我的程序中有一些 goroutine 以及 goroutine 用来通信的 channel 。有时我想检查一下 channel 里面有什么。我怎样才能在不中断 goroutines 工作的情况下实现这一目标? channel 有打印内容的功能吗?还是我应该以某种方式复制它们?

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
}

最佳答案

How could I achieve that without interrupting the goroutines' work?

简单的答案是,如果不打扰,就不能。 channel 是一种同步原语,这意味着它们使并发程序能够安全地进行通信。如果你从一个 channel 中取出一些东西,那个“取出”是自动发生的,没有人可以从同一个 channel 中取出同样的东西。这是有意的。

你可以做的是把元素拿出来,打印出来后再放回去。这种方法的问题在于,一些元素可能永远不会被打印,而另一些元素可能会被打印多次,因为所有 goroutine 都会争先恐后地从 channel 中获取项目。

听起来您需要的不是 channel 。

关于go - 如何在不更改 channel 的情况下打印 channel 内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30647393/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com