问题标签 [go]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
concurrency - 是否可以从 Go 中的多个 goroutine 之一接收结果?
我最近才了解了 Google 的编程语言 Go。我对它提供的并发支持很感兴趣,并着手了解更多有关它的信息。然而,我去看看 Go 是如何实现一个特定的并发特性的,到目前为止我还没有看到任何证据表明这个特性是存在的。
这是一个假设的情况:假设我们正在编写一个函数来确定特定输入的 Foo 值。对于任何给定的输入,Foo 值可以在域 A 或域 B 中找到(不在两者中)。这些领域的搜索技术大相径庭,但它们都有一个共同的特点,即成功的搜索往往会很快返回,而不成功的搜索必须遍历整个数据集才能详尽无遗,因此需要很长时间。
现在,在其他使用并发的语言(例如Cilk)中,可以对函数 Foosearch 进行编程,以便它产生一个 Asearch 函数和一个 Bsearch 函数。这些函数将同时运行,并且每当它们中的任何一个提出答案时,该答案都会报告给调用函数 Foosearch,该函数将终止它产生的任何未返回的函数。
然而,使用 Go 的 goroutine,您似乎只能将两个例程与一个通道连接 - 因此您无法设置 Asearch 或 Bsearch 可以发送到的通道,具体取决于哪个首先找到答案,并让 Foosearch 从它。看起来您也无法在不阻塞的情况下从通道中读取 - 所以您不能让 Foosearch 启动 Asearch 和 Bsearch 并从两者设置通道,然后在循环中运行以查看其中一个或另一个是否产生了答案。
我对 Go 并发限制的理解是否正确?还有另一种方法可以达到给定的结果吗?
java - Go 的多线程和 pthread 或 Java 线程有什么区别?
Go 的多线程方法与其他方法(例如 pthread、boost::thread 或 Java 线程)有什么区别?
java - Go 和 Java 使用用户空间线程这一事实是否意味着您不能真正利用多核?
我们最近在我的操作系统课上讨论了很多线程,我想到了一个问题。
由于 Go(和 Java)使用用户空间线程而不是内核线程,这是否意味着您不能有效地利用多个内核,因为操作系统只将 CPU 时间分配给进程而不是线程本身?
programming-languages - Go语言的应用领域
谁能告诉我“go”语言的应用领域?
哪些应用程序是使用“Go”语言构建的?
它最适合什么样的应用?
python - Go 和 Cython 的区别
今天我的一个好朋友问我最新的 Go 语言和Cython之间的主要区别是什么,Cython是 Python 的一组 C 扩展。我对 Python 知之甚少,谁能告诉我为什么 Go 比 Cython 更好/更差?
string - 如何在 Go 中反转字符串?
我们如何在 Go 中反转一个简单的字符串?
shared-libraries - Go 中的共享库?
是否可以使用 Go 创建共享库 (.so)?
更新:为它创建了一个“问题”。
vim - 在哪里可以找到 go 语言的 Vim 语法文件?
有没有人为 go 语言创建了 vim 语法文件?
c - 接口 Go 与 C 库
如何将 Go 程序与 C 库接口?
我一直在浏览 Go 的源代码,但仍然没有弄明白。如果有人已经这样做了,你能分享一下吗?
更新:感谢@fserb,我发布了一些来自 Go 资源的文档:
Cgo 允许创建调用 C 代码的 Go 包。
用法:cgo [编译器选项] file.go
当调用 gcc 来编译包的 C 部分时,编译器选项会通过未解释的方式传递。
输入 file.go 是一个语法有效的 Go 源文件,它导入伪包“C”,然后引用诸如 C.size_t 之类的类型、诸如 C.stdout 之类的变量或诸如 C.putchar 之类的函数。
如果“C”的导入紧跟在注释之前,则在编译包的 C 部分时,该注释将用作标题。例如:
Cgo 将输入文件转换为四个输出文件:两个 Go 源文件,一个用于 6c(或 8c 或 5c)的 C 文件,以及一个用于 gcc 的 C 文件。
Make.pkg 中的标准包 makefile 规则使使用 cgo 的过程自动化。有关示例,请参见 $GOROOT/misc/cgo/stdio 和 $GOROOT/misc/cgo/gmp。
Cgo 还不能与 gccgo 一起工作。
string - 如何在go中有效地连接字符串
在 Go 中,astring
是一种原始类型,这意味着它是只读的,每次对其进行操作都会创建一个新字符串。
因此,如果我想在不知道结果字符串长度的情况下多次连接字符串,那么最好的方法是什么?
天真的方法是:
但这似乎不是很有效。