问题是 goOne 和 goTwo 函数都分别向通道 ch1 和 ch2 发送值,但是在主 function 中没有这些值的相应接收器。这意味着通道被阻塞,程序无法继续。 导致main function中的select语句无法从通道读取,所以一直执行default case。 Output: 我正 ...
问题是 goOne 和 goTwo 函数都分别向通道 ch1 和 ch2 发送值,但是在主 function 中没有这些值的相应接收器。这意味着通道被阻塞,程序无法继续。 导致main function中的select语句无法从通道读取,所以一直执行default case。 Output: 我正 ...
我被赋予了一项任务,以给定的方式使用正则表达式和带有等待组的 goroutine 在文本文件中搜索 URL:文本应该在 N 个工作人员(goroutines)之间划分,每个 goroutine 搜索 //https://,goroutines在 waitgroup 中,最终结果应该是来自所有 go ...
在我写的 golang package 中,我经常需要发出 2 HTTP 请求来获取我需要的数据。 我的 package 包含客户端函数,通常有 0 arguments 并返回一个结构和一个错误。 func (c Client) GetProduct() (*Product, error) 但是, ...
我目前有一个程序可以创建一个大小为 1 的工作组,然后调用 startworker: 写CreateGroup的地方: Startworker 是这样写的: 这适用于大小为 1 的工作组,但每次尝试使它适用于更大的工作组都失败了——到目前为止我所学到的是我想要context.WithCancel( ...
我有一个 function 可以在单独的 goroutine 中顺序或同时调用。 我想确保 function 在主 goroutine 完成之前完全执行,所以我将 *sync.WaitGroup 参数传递给 function。现在,在某些地方 function 将被顺序调用。 我可以像这样将 ni ...
为了给你上下文, 变量elementInput是动态的。 我不知道它的确切长度。 它可以是 10、5 等。 *Element 通道类型为 struct 我的例子正在工作。 但我的问题是这个实现仍然是同步的,因为我正在等待通道返回,以便我可以 append 它到我的结果您能帮我如何同时调用GetE ...
我想在子例程中填充 arrays 数组。 我正在尝试使用频道来做到这一点。 我正在学习 go,所以不清楚这是否是正确的方法,所以如果我走错了方向,请纠正我,但我的代码永远不会返回。 我究竟做错了什么?var c = make(chan [15][4]string) var mymap = map[ ...
我创建了一个 API,它在处理请求后发送一个响应并启动一个记录一些消息的后台 goroutine。 在处理 API 请求后,我使用“延迟”来执行 goroutine。 以下是代码片段: 发送响应伪代码: 响应结构: API 正文: logMsgs 伪代码: 预期结果是收到 API 响应,几秒后( ...
我有一个 Go 项目示例,试图模拟类似烘烤 1000 个披萨并发的东西,但烤箱只有 10 个部件来放置披萨。 我是这样开发的,但是goroutines死锁了。 谁能帮忙 当 10 个烤箱部分充满死锁时会引发错误准备披萨:9 准备披萨:0 准备披萨:1 准备披萨:2 准备披萨:3 准备披萨:4 准备披 ...
我有一个具有流式端点的golang grpc 服务器。 早些时候我按顺序完成所有工作并发送到 stream 但后来我意识到我可以让工作并发然后发送到 stream。来自grpc-go文档:我知道我可以让工作并发,但你不能让 stream 并发发送,所以我得到了下面的代码来完成这项工作。 下面是我的 ...
我有一个需要并行循环的resourceId数组。 并为每个资源生成URL ,然后放入一个map,它是键(resourcId),值为url。 我得到了下面的代码来完成这项工作,但我不确定这是否是正确的方法。 我在这里使用sizedwaitgroup来并行化resourceId列表。 并且在向其写入数 ...
https://go.dev/play/p/YVYRWSgcp4u 我在“开发人员的 Go 工具和技术中的并发性”中看到了这段代码,其中提到了广播的用法,上下文是使用广播来唤醒三个 gorouting。 我正在尝试了解订阅部分 作者说: 在这里,我们定义了一个便利函数,它允许我们注 ...
这是我运行整个工作人员的代码段 这是我的工人 当我在没有 WaitGroup 的情况下运行时,它只会创建我需要的整个文件中的一部分。 但它显示了它的过程。 它显示worker1做工作,worker2做工作等等......所以直到程序结束它会显示每一个。 否则,使用 waitgroup 它创建我需要 ...
我有这段代码,它使用输入和 output 通道和相关的 WaitGroups 同时运行 function,但我被告知我做错了一些事情。 这是代码: 我已经在评论中指出我执行错误的地方。 现在这些评论对我来说很有意义。 有趣的是,这段代码确实看起来是异步运行的,并且大大加快了执行速度。 我想了解我做错 ...
我想用设置器 function 将 0-9 发送到ch1通道,然后计算机 function 将ch1中的数字平方,然后将结果发送到ch2通道。 但是,运行此代码时我会感到恐慌。 有人能解释为什么会发生这种情况,我完全糊涂了。 像这样的错误: ...
我对 go 有点陌生,并且正在修改我在其他地方找到的代码以满足我的需求。 正因为如此,我并不完全理解这里发生了什么,尽管我明白了一般的想法。 我正在使用 go 例程运行一些 websocket 客户端,但是我遇到了一个导致程序崩溃的意外错误。 当从 websocket 读取消息时出错(检查 read ...
假设我有一个 function 如果它作为 go 例程异步执行: 如何为f创建一个单元测试以确保wg.Done() ? 一种选择是在调用f之后直接在测试中调用wg.Done() 。 如果f调用wg.Done()失败,测试会恐慌,这不好。 另一种选择是为sync.WaitGroup创建一个接口,但这 ...
我有一个大致如下的代码库 我编写了与此类似的单元测试。 所有测试均成功。 但是在执行命令go test -v时,我在代码中的多个地方看到程序出现恐慌并给出了invalid memory address or nil pointer dereference 。 我在调试模式下检查了代码,发现问题出在方 ...
我正在尝试同时运行一个函数。 它调用我的数据库可能需要 2-10 秒。 我希望它在完成后继续下一个例程,即使另一个例程仍在处理,但只希望它一次最多处理 2 个。 我希望这无限期地发生。 我觉得我几乎没有,但waitGroup的力和程序要等到完成继续另一次迭代之前。 ...
我有一个 LOOP,它对给定的键在内部进行散列并返回结果,但在结果上,如果我有 1500 个 URL 列表进入 LOOP,它永远不会返回 1500 的结果,它总是返回小于 1500。 我在下面做错了什么: 我尝试了两种Add方法 - 一个内部循环为 1,一个外部循环为总长度。 我希望函数返回 ...