golang 使用switch case多個值,犯的錯
今天寫golang switch case時,帶入了python rust語法,記錄一下,錯誤代碼如下
package main
import "fmt"
func main() {
a := 1
switch a {
case 0:
fmt.Println( "zero" )
case 1 | 2:
fmt.Println( "one or two" )
default :
fmt.Println( "don't care" )
}
}
結果打印是 don't care,半天沒看出為什么。原因出在 case 1 | 2,實際等效于 case 3,a := 1 | 2 表示 按位或運算(bitwise OR),正確代碼如下
package main
import "fmt"
func main() {
a := 1
switch a {
case 0:
fmt.Println( "zero" )
case 1, 2:
fmt.Println( "one or two" )
default :
fmt.Println( "don't care" )
}
}
以上邏輯python實現如下
if __name__ = = '__main__' :
a = 1
match a:
case 0 :
print ( "zero" )
case 1 | 2 :
print ( "one or two" )
case _:
print ( "don't care" )
同樣的rust實現如下
fn main() {
let a = 1;
match a {
0 => {
println!("zero");
},
1 | 2 => {
println!("one or two");
},
_ => {
println!("don't care");
}
}
}

浙公網安備 33010602011771號