阅读 723

go的十万个为什么?-性能和控制流|Go主题月

本文中译于官方FAQ

原文地址:golang.org/doc/faq#Con…

golang.org/doc/faq#Per…

Go 项目控制流

为什么Go 没有三元运算符?

Go中没有三元测试操作。您可以使用以下方法获得相同的结果:

if expr {
    n = trueVal
} else {
    n = falseVal
}
复制代码

Go缺少?:的原因是该语言的设计人员发现该操作过于频繁地用于创建难以理解的复杂表达式。if-else形式虽然更长,但无疑更清晰。一种语言仅需要一个条件控制流构造。

Go 项目性能

为什么Go在基准X上表现不佳?

Go的设计目标之一是使 C 的性能达到可比程序的水平,但在某些基准测试中却表现不佳,包括golang.org/x/exp/shoot…中的一些基准测试。最慢的依赖库在 Go 中不提供可比性能的版本。例如,pidigits.go依赖于一个多精度数学包,而与 Go 语言不同,C 版本使用GMP(由优化的汇编器编写)。依赖于正则表达式的基准(例如,regex-dna.go)实际上是将 Go 的本地正则表达式包与成熟的,高度优化的正则表达式库(如PCRE)进行比较。

基准测试是通过广泛的调整赢得的,大多数基准的 Go 版本需要引起注意。如果您测量类似的 C 和 Go 程序(reverse-complement.go是一个示例),您会发现这两种语言的原始性能比该套件所表明的要紧密得多。

尽管如此,仍有改进的空间。编译器不错,但可能会更好,许多库需要大量的性能工作,而且垃圾收集器还不够快。(即使是这样,注意不要产生不必要的垃圾,因为这也会产生巨大的影响。)

无论如何,Go 往往具有很高的竞争力。随着语言和工具的发展,许多程序的性能有了显着提高。有关信息示例,请参阅有关对 Go 程序进行概要分析的博客文章。

文章分类
后端
文章标签