14

在 Go 中,switches 比 C(和 C++)中的灵活得多,因为它们可以处理布尔表达式的情况,并看似完全替换大else梯子if,尤其是使用默认switch {...}块。

switch {
    case x < 5 && y > 2:
        //...
    case y == 1 || x > 2:
        //...
    default:
}

使用switchover else- ifin Go 有什么效率优势吗?似乎提高的效率会因switch的灵活性而丧失。只是由编译器来解决它,看看它是否可以制作一个跳转表?

使用switchoverif和有什么性能优势else吗?

4

3 回答 3

14

除非您所有的都是整数常量,否则您将失去将 转换为跳转表case的可能性。switch

因此,如果只使用整数常量,Go 最多switch可能等同于 C++ switch,否则它不会比if/else.

于 2013-05-24T00:19:42.257 回答
12

完全由编译器决定并为您的代码选择一个好的实现策略。您始终可以通过请求编译器输出的汇编列表来找出编译器正在生成的代码。请参阅Go 编译器的-S选项。

于 2013-05-24T00:16:15.173 回答
-1

这肯定与您的应用程序性能无关。可能还有其他更复杂的情况可以提高性能。就像保存单个 SQL 查询可能就像 100 万个 if/else/switch。

不要太担心这样的细节,而是专注于更高层次的东西。

于 2013-05-24T00:18:34.940 回答