golang的语法里,选择判断的语句有 switch case
if else
select case
这三个组合。而 select case
通常是搭配 channel
类型使用的,所以暂时不在这篇文章的讨论范围。
通常来说我们更倾向于使用 switch case
而不是 if else
, 因为前者更加优雅清晰 , 而且在 c 中,编译器有对switch
语句进行优化 —>出处 。而 golang 因为没有和c一样生成跳转表,golang 的switch
实现是通过二分法(v1.7.2)来实现的。所以有人测出在超多分支的情况下 , golang的 switch
比起map
后if else
要慢 ,因为命中率太低了。而小分支的情况下,性能的差距是很小而基本可以忽略的。
1 |
|
以下是测试结果
1 | BenchmarkSwitch-8 200000 7612 ns/op |
可以看出来,小分支的情况下,性能和 if
比起来甚至会超过 if
(Golang v1.12.6) 。
所以,在使用 golang 的过程中,如果不是极度需要考虑到性能的情况,为了代码的优雅,请多多使用switch
!