转换字符串效率

ash*_*ash 8 string performance go switch-statement

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

switch s{
case "alpha": doalpha()
case "betta": dobetta()
case "gamma": dogamma()
default: dodefault()
Run Code Online (Sandbox Code Playgroud)

这等于:

if s=="alpha"{
  doalpha()
} else if s == "betta" {
  dobetta()
} else if s == "gamma" {
  dogamma()
} else {
dodefault()
}
Run Code Online (Sandbox Code Playgroud)

Iam*_*NaN 13

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

但是请参阅Go邮件列表中的链接,了解有关switch语句实现的一些细节:

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

因此,基于此,应该没有什么区别.并且switch语句看起来更清晰.这是编写更长的if-else语句的推荐方法:

因此,将if-else-if-else链作为开关编写是可能的,也是惯用的.


rus*_*tyx 5

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

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

这个小型基准测试中,我们可以看到switch只有5 个案例的 a比相应的if-then-else序列平均快 1.5 倍。一般来说,我们可以假设 O(logN) 与 O(N) 的性能差异。

较少的 3 个案例进行线性比较,因此预期具有与if-then-else相同的性能。