if 条件判断语句

93 阅读1分钟

if 语句结构

GOif 语句结构,像其他语言一样有以下三种

func main() {
    if 布尔表达式 {    // 如果不是复合条件判断,不需要使用 ()
        // 逻辑...
    }
}
func main() {
    if 布尔表达式 {
        // 逻辑1...
    } else {
        // 逻辑2...
    }
}
func main() {
    if 布尔表达式1 {
        // 逻辑1...
    } else if 布尔表达式2 {
        // 逻辑2...
    } else {
        // 逻辑3...
    }
}

if 语句变体

使用简洁变量赋值,与判断逻辑放在一行进行处理,该变量的作用范围被限制在 if...else 语句组合中

func main() {
    if num := 6; num%2 == 0 {
        fmt.Println(num, "是偶数")
    } else {
        fmt.Println(num, "是奇数")
    }
}

可以将返回值与判断放在一行进行处理,而且返回值的作用范围被限制在 if...else 语句组合中。

package main

import (
    "errors"
    "fmt"
)

func promise() error {
    return errors.New("error")
}

func main() {
    if err := promise(); err != nil {
        fmt.Println("error happen")
    }
    fmt.Println(err)   // 此处会报错 undefined: err
}

Tips:

在编程中,变量在其实现了变量的功能后,作用范围越小,所造成的问题可能性就越小。
每一个变量代表一个状态,有状态的地方,状态就会被修改,
函数的局部变量只会影响一个函数的执行,
但全局变量可能会影响所有代码的执行状态,
因此限制变量的作用范围对代码的稳定性有很大帮助。

代码示例

package main

import (
    "fmt"
)

func main() {
    // if... 条件句
    isNinja := true
    if isNinja {
        fmt.Println("一个忍者")
    }

    // if...else... 条件句
    age := 18
    if age < 18 {
        fmt.Println("小孩")
    } else {
        fmt.Println("成年")
    }

    // if...else if...else... 条件句
    name := "Naruto"
    if name == "Sakura" {
       fmt.Println("春野樱")
    } else if name == "Sasuke" {
       fmt.Println("宇智波佐助")
    } else {
       fmt.Println("漩涡鸣人")
    }

    // if 条件句的嵌套
    hero, country := "悟空", "日本"
    if hero == "悟空" {
        if country == "日本" {
            fmt.Println("七龙珠")
        } else {
            fmt.Println("西游记")
        }
    }

    // 复合条件(可以使用括号扩住单个条件)
    height, weight := 175, 70
    if (height > 180) && (weight < 60) {
        fmt.Println("高瘦子")
    } else if (height < 170) && (weight > 80) {
        fmt.Println("矮胖子")
    } else {
        fmt.Println("匀称")
    }
}