Frequently Asked Questions:CPU数量和速度?三元操作符?测试单元?

159

这是我参与更文挑战的第14天,活动详情查看:更文挑战

为什么有更多的CPU但是我的程序没有跑得更快?

更多的CPU是否会让程序更快地运行,取决于程序解决的问题。Go语言提供并发操作(例如Goroutines和channels),但仅在代码本质上是并行的时候,才会真正并行执行。通过添加更多CPU,不能加速那些本质上是顺序执行的问题,而如果可以将这些分为并行执行的话,有时会显着地提高效率。

有时添加更多CPU还会减慢程序。程序如果启用系统多线程,然后花费更多的时间在同步互斥和通讯上来优化一些计算,可能会让程序有明显的下降。这是因为在不同的线程之间传递数据,涉及上下文的传递,这个过程会随着CPU的增加而增加。例如,增加线程数量(CPU)更有可能减慢它而不是加速它

有关此主题的更多详细信息,请参阅blog.golang.org/2013/01/con…

Go没有?:操作符?

Go语言中是没有三元运算符的。你可以用下面的例子实现相同效果:

if expr {
    n = trueVal
} else {
    n = falseVal
}

Go没有?:运算符的原因 是因为设计者看过非常多的写的很复杂而时常运行失败的表达式。if-else这种形式,虽然写的代码更长,但是毫无疑问的更加整洁。一个语言应该只有一种条件控制结构。

我该怎么写测试单元?

在你文件的相同目录下,创建一个_test.go结尾的文件,在该文件中,写上import "testing"并且按以下形式组织代码。

func TestFoo(t *testing.T) {
    ...
}

执行go test在该目录下。该命令会找到所有test方法,构建二进制文件,并且执行。查看这篇文章获取更多的细节golang.org/doc/code.ht…