转换字符串效率

时间:2015-04-10 16:21:53

标签: string performance go switch-statement

你好Go开关字符串只是方便的形式,但不是最快的实现吗?

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()
}

2 个答案:

答案 0 :(得分:12)

你必须对它进行基准测试,以便告诉你案件的实际差异。这取决于编译器及其所做的优化,因此取决于平台和体系结构。

但请参阅此link from the Go mailing list以获取有关switch语句实现的一些细节:

  

实施的内容如下。   1.依次编译和测试所有非常数情况。   2.大于3个常数个体的群被二元分割和征服。   3.线性比较3个或更少的病例。

因此,基于此,应该没有什么区别。并且switch语句看起来更清晰。并且recommend way要编写更长的if-else语句:

  因此,写一个if-else-if-else是可能的,也就是惯用语   链作为开关。

答案 1 :(得分:0)

在Go中,具有4个或更多情况的常量表达式switch被实现为binary search

这些案例在编译时进行排序,然后进行二进制搜索。

this small benchmark中,我们看到switch仅有 5例,比相应的平均快 1.5倍 -then-else 序列。通常,我们可以假设O(logN)与O(N)的性能差异。

较少的3种情况被线性比较,因此期望与 if-then-else 的性能相同。