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");
        }
    }
}

  

posted @ 2025-10-21 11:09  ALXPS  阅读(16)  评论(0)    收藏  举报