问题标签 [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.

0 投票
2 回答
437 浏览

concurrency - 是否可以从 Go 中的多个 goroutine 之一接收结果?

我最近才了解了 Google 的编程语言 Go。我对它提供的并发支持很感兴趣,并着手了解更多有关它的信息。然而,我去看看 Go 是如何实现一个特定的并发特性的,到目前为止我还没有看到任何证据表明这个特性是存在的。

这是一个假设的情况:假设我们正在编写一个函数来确定特定输入的 Foo 值。对于任何给定的输入,Foo 值可以在域 A 或域 B 中找到(不在两者中)。这些领域的搜索技术大相径庭,但它们都有一个共同的特点,即成功的搜索往往会很快返回,而不成功的搜索必须遍历整个数据集才能详尽无遗,因此需要很长时间。

现在,在其他使用并发的语言(例如Cilk)中,可以对函数 Foosearch 进行编程,以便它产生一个 Asearch 函数和一个 Bsearch 函数。这些函数将同时运行,并且每当它们中的任何一个提出答案时,该答案都会报告给调用函数 Foosearch,该函数将终止它产生的任何未返回的函数。

然而,使用 Go 的 goroutine,您似乎只能将两个例程与一个通道连接 - 因此您无法设置 Asearch 或 Bsearch 可以发送到的通道,具体取决于哪个首先找到答案,并让 Foosearch 从它。看起来您也无法在不阻塞的情况下从通道中读取 - 所以您不能让 Foosearch 启动 Asearch 和 Bsearch 并从两者设置通道,然后在循环中运行以查看其中一个或另一个是否产生了答案。

我对 Go 并发限制的理解是否正确?还有另一种方法可以达到给定的结果吗?

0 投票
4 回答
17894 浏览

java - Go 的多线程和 pthread 或 Java 线程有什么区别?

Go 的多线程方法与其他方法(例如 pthread、boost::thread 或 Java 线程)有什么区别?

0 投票
3 回答
971 浏览

java - Go 和 Java 使用用户空间线程这一事实是否意味着您不能真正利用多核?

我们最近在我的操作系统课上讨论了很多线程,我想到了一个问题。

由于 Go(和 Java)使用用户空间线程而不是内核线程,这是否意味着您不能有效地利用多个内核,因为操作系统只将 CPU 时间分配给进程而不是线程本身?

这似乎证实了你不能

维基百科似乎也这么认为

0 投票
1 回答
1235 浏览

programming-languages - Go语言的应用领域

谁能告诉我“go”语言的应用领域?

哪些应用程序是使用“Go”语言构建的?

它最适合什么样的应用?

0 投票
6 回答
6204 浏览

python - Go 和 Cython 的区别

今天我的一个好朋友问我最新的 Go 语言和Cython之间的主要区别是什么,Cython是 Python 的一组 C 扩展。我对 Python 知之甚少,谁能告诉我为什么 Go 比 Cython 更好/更差?

0 投票
33 回答
101104 浏览

string - 如何在 Go 中反转字符串?

我们如何在 Go 中反转一个简单的字符串?

0 投票
4 回答
34176 浏览

shared-libraries - Go 中的共享库?

是否可以使用 Go 创建共享库 (.so)?

更新:为它创建了一个“问题”。

0 投票
4 回答
5254 浏览

vim - 在哪里可以找到 go 语言的 Vim 语法文件?

有没有人为 go 语言创建了 vim 语法文件?

0 投票
1 回答
7401 浏览

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 一起工作。

0 投票
19 回答
562917 浏览

string - 如何在go中有效地连接字符串

在 Go 中,astring是一种原始类型,这意味着它是只读的,每次对其进行操作都会创建一个新字符串。

因此,如果我想在不知道结果字符串长度的情况下多次连接字符串,那么最好的方法是什么?

天真的方法是:

但这似乎不是很有效。