如何在不阻塞的情况下确定 goroutine 是否已完成?

2023-12-29

到目前为止我见过的所有例子都涉及阻塞以获得结果(通过<-chan操作员)。

我当前的方法涉及传递指向结构的指针:

type goresult struct {
    result resultType;
    finished bool;
}

goroutine 在完成时写入的内容。然后就是一个简单的检查问题finished方便的时候。你有更好的选择吗?

我真正的目标是 Qt 风格的信号槽系统。我有预感该解决方案看起来几乎微不足道(chan很多未开发的潜力),但我对这门语言还不够熟悉,无法弄清楚它。


您可以使用“逗号,好的”模式(请参阅他们的页面“有效的去 http://golang.org/doc/effective_go.html"):

foo     := <- ch; // This blocks.
foo, ok := <- ch; // This returns immediately.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在不阻塞的情况下确定 goroutine 是否已完成? 的相关文章

  • Golang 从管道读取读取大量数据

    我正在尝试读取一个正在被焦油化 流式传输到标准输入的存档 但我正在以某种方式读取far管道中的数据多于 tar 发送的数据 我像这样运行我的命令 tar cf somefolder my go binary 源代码是这样的 package
  • 无法从另一个标签的源代码构建和安装 go

    我正在尝试使用此从源代码构建和安装 go文档 https go dev doc install source 当我喜欢以下内容时 这效果很好 git clone https go googlesource com go goroot cd
  • 模块路径格式错误...第一个路径元素中缺少点

    我有一个包含 2 个不同可执行文件的项目 每个可执行文件都有自己的依赖项以及对根的共享依赖项 如下所示 Root gt server gt main go gt someOtherFiles go gt go mod gt go sum g
  • 正则表达式不匹配

    我正在尝试以下代码 d byte x01 x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 x80J x13 x80SQ x80L xe0 x80 x92 x80L x80H xe0 r regexp Must
  • 将 []string 传递给需要可变参数的函数

    为了不一遍又一遍地重复我的自我 我想创建一个处理运行一些命令的函数 func runCommand name string arg string error cmd exec Command name arg if err cmd Run
  • 无法封送,(实现encoding.BinaryMarshaler)。具有多个对象的 go-redis Sdd

    我有下面一段代码 我试图将一个数组添加到 redis 集中 但它给了我一个错误 package main import encoding json fmt github com go redis redis type Info struct
  • Bash脚本无法执行Go命令

    我正在尝试编写一个 bash 脚本来自动在不同的目录中运行 go get install 相关部分在这里 cd web go get cd web go install cd services go get cd services go i
  • Golang、mysql:错误1040:连接过多

    我正在使用 github com go sql driver mysql 驱动程序 我打开一个数据库 db err sql Open mysql str 然后我有两个函数 每个函数被调用 200 次 并使用以下 mysql 代码 rows
  • GO并发编程测试

    我试图确保我的并发程序不存在以下情况 僵局 livelock 饥饿 我找到了以下工具http blog golang org race detector http blog golang org race detector 我尝试编译并运行
  • 使用 crypto/ssh 的 golang scp 文件

    我正在尝试通过 ssh 下载远程文件 以下方法在 shell 上运行良好 ssh hostname tar cz opt local folder gt folder tar gz 然而 golang 上的相同方法在输出工件大小方面存在一些
  • 无法连接到代理“证书由未知机构签名”

    我正在尝试通过 Kubernetes 部署上的 cloudsql proxy 容器连接到 CloudSQL 实例 我已安装 cloudsql 凭据以及值GOOGLE APPLICATION CREDENTIALS set 但是 我的日志中仍
  • Go 中的 WebP 编码器/解码器

    是否有一个完整的 WebP 编码器和解码器与当前每周 或可分叉 兼容 它的速度与标准 png 相当吗 这个人在 GitHub 上有一个包 其中包含 WebP 的编码器和解码器 https github com chai2010 webp h
  • Golang 按位运算以及一般字节操作

    我有一些 C 代码 可以对字节执行一些按位运算 我正在尝试在 golang 中做同样的事情 但遇到了困难 C 中的示例 byte a c byte data int j c data j c byte c j c a c 0xFF c 0x
  • 为什么我的 SQL 占位符没有被替换(使用 Go pq)?

    根据文档 我正在这样做 var thingname string asdf var id int err database QueryRow SELECT id from things where thing thingname Scan
  • Golang 基础知识 struct 和 new() 关键字

    我正在学习 golang 当我阅读描述结构的章节时 我遇到了初始化结构的不同方法 p1 passport var p2 passport p3 passport Photo make byte 0 0 Name Scott Surname
  • 使用 testify 模拟接口方法两次,输入和输出不同

    如何在 golang 测试中模拟接口方法两次 例如 type myCache interface Get key string data interface error type service struct cache myCache f
  • 如何在C#中执行Go函数

    有没有办法从 C 执行 Go 函数 例如 对于 Python 我会使用 Ironpython 我知道我可以生成一个进程来执行 Go 脚本 但如果可能的话 我真的不想回退到这样的解决方案 Google 搜索没有显示任何内容 那么有什么方法可以
  • Gorm 总是返回带有 nil 值的结构

    我正在使用 Gorm 构建 Go Web API 作为 Amazon RDS 中 Postgresql 数据库的 ORM 问题是 Gorm 总是返回一片结构 其值全部为零 尽管数据库已经填充了数据 切片中的结构体数量是否合适取决于LIMIT
  • 如何从非英语字符串解析go中的月份

    我想将以下字符串解析为 go 中的日期 This item will be released on March 9 2014 我跟着this https stackoverflow com questions 14106541 go par
  • Golang中如何获得100%的代码覆盖率? [复制]

    这个问题在这里已经有答案了 我无法获得 100 的代码覆盖率 因为我无法在 Golang 中测试 Fatals 我发现了一些问答 包括this one https stackoverflow com questions 30688554 h

随机推荐

  • _UIFallbackPresentationViewController

    当我关闭通过点击 iPhone 上 UIWebView 中 UIMenuController 上的 定义 打开的字典时 我不断收到以下错误 Unbalanced calls to begin end appearance transitio
  • 如何使用jquery创建动态变量?

    我想要动态创建一些 jquery 变量 在我的代码中 我有一个循环 并且我想使用循环值创建一些变量 这是我的示例代码 array student parent employee each user types function index
  • 如何强制执行软件试用安装的到期日期?

    我需要为我的定制软件提供试用期 我有一个 64 位 C 应用程序 它使用 64 位多处理器支持 DLL 其他要包含的实用程序是用 C 编写的 exe 和 dll 我必须能够加密 C 代码 将软件加密为仅在特定计算机上运行 并强制执行不能通过
  • 使用 Excel 宏/vba 打开/关闭图表系列的可见性

    我正在 Excel 中制作折线图 图表 并将多个数据系列绘制到同一个图表上 我需要创建一个宏 VBA 解决方案 可以通过按下按钮 或复选框等 打开 关闭这些系列的可见性 类似这张图 通过excel菜单系统手动完成 我试图查看所有成员变量 方
  • 在位图图像中设置背景颜色

    我想将画布保存为图像 它可以工作 但背景颜色是黑色 我必须如何添加才能改变颜色 我使用这段代码 Size size new Size surface Width surface Height surface Measure size sur
  • 如何打印带有参数值的调用堆栈?

    功能traceback print stack 打印调用堆栈 如果我们可以看到每个级别的参数值 将有助于调试 但我找不到办法做到这一点 例如 def f1 a 2 f2 a a 1 def f2 a 3 f3 def f3 a 4 prin
  • 为什么 MongoDB 文档建议不要使用 DBREF?

    The DBREF 的 MongoDB 文档 https docs mongodb org manual reference database references say 除非您有令人信服的理由使用 DBRef 否则请使用手动引用 为什么
  • 如何减少对模板函数的调用

    有一个功能 template
  • 有没有可以填充本机 Windows 表单字段的 python 模块?

    我想知道有哪些 Python 模块可以帮助我在本机 Windows 应用程序 IDE 中输入表单数据 例如 受密码保护的 USB 具有输入密码的应用程序 我想通过运行应用程序并使用密码填写表单来自动化此过程 提前致谢 roo7break 图
  • 如何在 Visual Studio 中的匿名命名空间内按函数名称设置断点?

    我有以下代码 namespace void Foo namespace Bar void Foo int main Foo Bar Foo return 0 我想设置断点Foo 按名称在匿名命名空间内 Ctrl B 键绑定 我可以对命名空间
  • iOS 应用程序启动时间测量

    如何计算从用户按下主屏幕上的启动按钮到应用程序处于活动状态 例如 直到第一个视图控制器的 viewDidAppear 方法 所需的时间 Id 不需要以编程方式实现 但必须可靠 类似地 在 Android 中 logcat 可以用于此效果 Y
  • 在 JSF 中分配“值表达式”代替“方法表达式”

    在我的复合组件中 我迭代了list
  • 在导航栏中按下后退按钮时会发生什么

    我想知道按下导航栏上的后退按钮时调用的函数是什么 我想在按下按钮时添加一些功能 谁知道呢 提前致谢 您想要的功能位于UINavigationBarDelegate协议 实施 navigationBar shouldPopItem 方法并将你
  • 为什么“htons”和“ntohs”同时存在?

    我不知道为什么htons and ntohs两者都存在于标准库中 他们做的事情完全相同 除非我不知何故感到困惑 同样适用于htonl and ntohl 它们制作自记录代码 告诉读者数据是按主机顺序还是网络顺序
  • 将 C# 中的结构序列化为 C++,反之亦然

    有没有一种简单的方法可以序列化 C 结构 然后从 C 反序列化它 我知道我们可以将 csharp 结构序列化为 xml 数据 但我必须在 c 中实现 xml 反序列化器 C 中哪种序列化器最容易从 C 反序列化 我希望两个应用程序 一个 C
  • 使用哪些 NuGet 源进行恢复?

    我正在做一个简单的dotnet restore在我的Mac上 我正在使用 目前 最新的dotnet CLI 版本 2 2 https dotnet microsoft com download 由于您的项目文件夹中可以同时拥有 NuGet
  • Caddy - 如何仅为一个域禁用 https

    我有一个 Caddy v2 的配置文件 如下所示 sentry mydomain ru reverse proxy sentry 9000 tasks mydomain ru reverse proxy taiga proxy 80 ain
  • 网格数据结构

    通常 可扩展 网格表示为列表列表 行列表 每行都有单元格列表 这些列表是某种链接列表 在此数据结构中操作 删除 插入 行既简单又便宜 只需重新链接以前的节点即可 但是当涉及到列时 例如删除列 它会变成一个非常长的操作 我需要 循环 要删除索
  • array+=value 在 ksh 中不起作用?

    我在某处读到 ksh 的数组支持 附加新元素 但我尝试了它 但它不起作用 ksh arr a b c d ksh arr e ksh echo arr ae b c d ksh 为什么arr 0 变成ae 要将一个元素添加到数组中 应该如下
  • 如何在不阻塞的情况下确定 goroutine 是否已完成?

    到目前为止我见过的所有例子都涉及阻塞以获得结果 通过 lt chan操作员 我当前的方法涉及传递指向结构的指针 type goresult struct result resultType finished bool goroutine 在