为了账号安全,请及时绑定邮箱和手机立即绑定

Go switch 字符串效率

Go switch 字符串效率

Go
德玛西亚99 2021-09-27 20:39:14
你好,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()}
查看完整描述

2 回答

?
守候你守候我

TA贡献1802条经验 获得超10个赞

您必须对其进行基准测试,以了解您的案例的实际差异。这取决于编译器和它所做的优化,因此取决于平台和架构。

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

执行情况如下。

  1. 按顺序,所有非常量情况都作为 if-else 进行编译和测试。

  2. 大于 3 个常量案例的组被二元划分和征服。

  3. 线性比较 3 个或更少的案例。

因此,基于此,应该几乎没有差异。而且 switch 语句看起来更简洁。这是编写更长的 if-else 语句的推荐方法

因此,将 if-else-if-else 链编写为 switch 是可能的,并且是惯用的。


查看完整回答
反对 回复 2021-09-27
?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

在 Go 中,switch具有 4 个或更多 case的常量表达式被实现为二分查找

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

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

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


查看完整回答
反对 回复 2021-09-27
  • 2 回答
  • 0 关注
  • 402 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信