转换vs if-else效率

时间:2013-05-24 00:14:22

标签: go switch-statement if-statement

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

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

在Go中使用switch优于else - if是否有效率优势? switch的灵活性似乎会损失提升的效率。是否只是由编译器来弄清楚它是否可以制作跳转表?

使用switch优于ifelse是否有任何性能优势?

3 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分:10)

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

所以,如果你只使用积分常数,Go的switch充其量只能等同于C ++的switch,否则它将不会比if/else更有效。

答案 2 :(得分:-1)

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

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

相关问题