猿问

Go switch 字符串效率

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


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

}


德玛西亚99
浏览 403回答 2
2回答

守候你守候我

您必须对其进行基准测试,以了解您的案例的实际差异。这取决于编译器和它所做的优化,因此取决于平台和架构。但请参阅Go 邮件列表中的此链接,了解有关 switch 语句实现的一些详细信息:执行情况如下。按顺序,所有非常量情况都作为 if-else 进行编译和测试。大于 3 个常量案例的组被二元划分和征服。线性比较 3 个或更少的案例。因此,基于此,应该几乎没有差异。而且 switch 语句看起来更简洁。这是编写更长的 if-else 语句的推荐方法:因此,将 if-else-if-else 链编写为 switch 是可能的,并且是惯用的。

沧海一幻觉

在 Go 中,switch具有 4 个或更多 case的常量表达式被实现为二分查找。这些案例在编译时排序,然后进行二进制搜索。在这个小型基准测试中,我们可以看到switch只有5 个案例的a平均比相应的if-then-else序列快 1.5 倍。一般来说,我们可以假设 O(logN) 与 O(N) 的性能差异。3 个较少的情况是线性比较的,因此期望与if-then-else 的性能相同。
随时随地看视频慕课网APP

相关分类

Go
我要回答