[go]if&switch

Posted iiiiiher

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[go]if&switch相关的知识,希望对你有一定的参考价值。

  • if改为switch
func main() {
    for i := 0; i < 3; i++ {
        if i == 0 {
            fmt.Println("0")
        }else if i == 1 || i == 2 {
            fmt.Println("1 or 2")
        } else {
            fmt.Println("not 0-2")
        }
    }
}
//可以改写为:

func main() {
    for i := 0; i < 3; i++ {
        switch {
        case i == 0:
            fmt.Println("0")
        case i == 1 || i == 2:
            fmt.Println("1 or 2")
        default:
            fmt.Println("not 0-2")
        }
    }
}
//也可以改写为这样
func main() {
    for i := 0; i < 3; i++ {
        switch i {
        case 0:
            fmt.Println("0")
        case 1, 2: //任意一个匹配即可
            fmt.Println("1 or 2")
        default:
            fmt.Println("not 0-2")
        }
    }
}
//对于条件较为复杂 使用
switch{
    case i>10 && i<20
}
  • default分支说明
//default分支不是必须
func main() {
    for i := 0; i < 3; i++ {
        switch i {
        case 0:
            fmt.Println("0")
        case 1, 2:
            fmt.Println("1 or 2")
        }
    }
}
//default位置可选
func main() {
    for i := 0; i < 3; i++ {
        switch i {
        default:
            fmt.Println("not 0-2")
        case 0:
            fmt.Println("0")
        case 1, 2:
            fmt.Println("1 or 2")
        }
    }
}
//case条件不能重复
func main() {
    i:=0
    switch i {
    case 0:
        fmt.Println("0")
    case 0:
        fmt.Println("0")
    }
}

//.main.go:10:2: duplicate case 0 in switch
//case后隐含break, 无需手动去break, 一旦匹配一个分支, 即跳出整个switch
func main() {
    i := 3
    switch {
    case i > 0:
        fmt.Println("i>0")
    case i > 2:
        fmt.Println("i>2")
    }
}

//i>0
  • fallthrough穿透(失效)下一层的条件, 执行下一层语句.
func main() {
    i := 1
    switch {
    case i > 0:
        fmt.Println("i>0")
        fallthrough
    case i > 2:
        fmt.Println("i>2")
    }
}

//i>0
//i>2
//fallthrough决定该层要不要穿透,如果该层无,则直接break,终结整个switch
func main() {
    i := 3
    switch {
    case i > 0:
        fmt.Println("i>0")
    case i > 2:
        fmt.Println("i>2")
        fallthrough
    default:
        fmt.Println("not 0 1 2 3")
    }
}

//i>0
//一旦一层被fallthrough, 其他的条件即使不成立, 也会被执行(无视条件了)
func main() {
    i := 1
    switch {
    case i > 0:
        fmt.Println("i>0")
        fallthrough
    case i > 2:
        fmt.Println("i>2")
    default:
        fmt.Println("not 0 1 2 3")
    }
}

//i>0
//i>2
func main() {
    i := 0
    switch {
    case i > 0:
        fmt.Println("i>0")
        fallthrough
    case i > 2:
        fmt.Println("i>2")
        fallthrough
    default:
        fmt.Println("not 0 1 2 3")
    }
}

//not 0 1 2 3
//fallthrough不允许放最后一个分支
func main() {
    i := 1
    switch {
    case i > 0:
        fmt.Println("i>0")
        fallthrough
    case i > 2:
        fmt.Println("i>2")
        fallthrough
    }
}

//.main.go:13:3: cannot fallthrough final case in switch
//switch满足条件处开始执行
func main() {
    s := "abcd"
    switch s[2] {
    case 'a':
        fmt.Println("a")
        fallthrough
    case 'b':
        fmt.Println("b")
        fallthrough
    case 'c':
        fmt.Println("c")
        fallthrough
    default:
        fmt.Println("default case")
    }
}
//c
//default case

以上是关于[go]if&switch的主要内容,如果未能解决你的问题,请参考以下文章

go if switch range

Go 关键字

Go之switch分支控制

GO - if判断,for循环,switch语句,数组的使用

Go常见语句

如何在JavaScript中将IF转换为SWITCH语句?