2015-04-10 3 views
6

Hello is Go switch string просто удобная форма, но не самая быстрая реализация?Go switch string efficiency

switch s{ 
case "alpha": doalpha() 
case "betta": dobetta() 
case "gamma": dogamma() 
default: dodefault() 

Это равно:

if s=="alpha"{ 
    doalpha() 
} else if s == "betta" { 
    dobetta() 
} else if s == "gamma" { 
    dogamma() 
} else { 
dodefault() 
} 
+3

[cmd/gc: оптимизировать операторы switch с строковыми буквами # 10000] (https://github.com/golang/go/issues/10000) – peterSO

ответ

11

вы; d должны бенчмарка его для того, чтобы сказать фактическое значение для вашего дела. Это зависит от компилятора и его оптимизаций и, следовательно, от платформы и архитектуры.

Но увидеть этот link from the Go mailing list для некоторых деталей о выполнении заявления выключателя:

, что реализуется следующим образом. 1. В порядке, все непостоянные случаи скомпилированы и протестированы как -если-elses. 2. группы более 3 постоянных случаев двоично делятся и покоряются. 3. 3 или меньше случаев сравниваются линейно.

Итак, на основе этого должно быть мало различий. И оператор switch явно выглядит чище. И это recommend way писать дольше, если-иначе заявления:

Это Поэтому возможно, и идиоматических-писать, если-иначе-если-нибудь цепь в качестве переключателя.