go语言学习笔记 — 基础 — 控制流:if条件(分支)语句

Posted Locutus

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go语言学习笔记 — 基础 — 控制流:if条件(分支)语句相关的知识,希望对你有一定的参考价值。

条件语句需要开发者通过指定一个或多个条件,并通过判断条件是否为true,来决定是否执行指定语句。若条件为false,则执行另外的语句。下图展示了程序语言中条件语句的结构:

Go语言提供了以下几种条件判断语句:

语句描述
if语句if语句由一个布尔表达式和之后紧跟的一个或多个语句组成。
if…else 语句在if语句之后,使用可选的else语句。在布尔表达式为false时,执行else语句中的表达式。
if 嵌套语句你可以在 if 或 else if 语句中,嵌套一个或多个 if 或 else if 语句。

1. 单if语句

  • 单if判断

语法

if 布尔表达式 { 
    分支 1  
}
package main

import "fmt"

func main() {
	// 定义局部变量
	var a int = 10

	// 使用if语句,判断条件是布尔表达式
	if a < 20 {
		// 如果条件为 true 则执行以下语句
		fmt.Printf("a 小于 20\\n" )
	}
	fmt.Printf("a 的值为 %d\\n", a)
}
  • if…else…判断
// 判断一个输入数字是否偶数
package main

import "fmt"

func main() {
	var s int    // 声明变量s是需要判断的数
	fmt.Println("输入一个数字:")
	fmt.Scan(&s)

	if s%2 == 0  { // s 除以 2 的余数是否等于 0
		fmt.Print("s是偶数\\n")   // 如果成立
	} else {                     // 否则
		fmt.Print("s不是偶数\\n")
	}
	fmt.Print("s 的值是:", s) ;
}
// 寻找100以内所有的素数
package main

import "fmt"

func main() {
    // var count,c int   // 定义了变量不使用,也会报错
    var count int
    var flag bool
    count=1
    //while(count<100) {    //go没有while
    for count < 100 {
        count++
        flag = true;
        //注意tmp变量  :=
        for tmp:=2;tmp<count;tmp++ {
            if count%tmp==0{
                flag = false
            }
        }

        // 每一个 if else 都需要加入括号 同时 else 位置不能在新一行
        if flag == true {
            fmt.Println(count,"素数")
        } else {
            continue
        }
    }
}

2. if嵌套语句

你可以在if或if…else语句中,嵌入一个或多个if、if…else或else if语句。

  • 在if语句中,嵌套if语句

语法

if 布尔表达式1 {
   // 在布尔表达式1为true时执行
   if 布尔表达式2 {
      /* 在布尔表达式 2 为 true 时执行 */
   }
}

条件判断,输出字符串

package main

import "fmt"

func main() {
   // 定义局部变量 
   var a int = 100
   var b int = 200
 
   // 条件判断
   if a == 100 {
       // if条件语句为true,则执行 
       if b == 200 {
          // if条件语句为true,则执行
          fmt.Printf("a 的值为 100 , b 的值为 200\\n" );
       }
   }
   fmt.Printf("a 值为 %d\\n", a );
   fmt.Printf("b 值为 %d\\n", b );
}
  • 在if…else语句中嵌套if…else语句

判断用户密码输入

package main

import "fmt"

func main() {
	var a int
	var b int

	fmt.Printf("请输入密码: \\n")
	fmt.Scan(&a)

	if a == 5211314 {
		fmt.Printf("请再次输入密码:")
		fmt.Scan(&b)
		if b == 5211314 {
			fmt.Printf("密码正确,门锁已打开")
		} else {
			fmt.Printf("非法入侵,已自动报警")
		}
	} else {
		fmt.Printf("非法入侵,已自动报警")
	}
}
  • 在if…else语句中嵌套else if语句

在Go语言中,我们可以通过if关键宇进行条件判断,其中表达式2、分支2和分支3都是可选的,可以根据实际需要自由组合选择。

if 布尔表达式 1 { 
    分支 1  // 首先判断,在布尔表达式1为true时执行 
} else if 布尔表达式 2 {
    分支 2  // 然后判断,在布尔表达式1为false,且布尔表达式2为true时执行 
} else {
    分支 3  // 最后判断,在布尔表达式1为false,且布尔表达式2为false时执行 
}
package main
  
import "fmt"

func main() {
    if num := 9; num < 0 {
        fmt.Println(num, "is negative")
    } else if num < 10 {                  // else if与if的条件判断同级
        fmt.Println(num, "has 1 digit")
    } else {
        fmt.Println(num, "has multiple digits")
    }
}

注:在条件判断语句里面允许声明一个变量,这个变量的作用域只能在该条件判断逻辑块内,其他地方就不起作用了。


3. 特殊写法

在if的布尔表达式之前,我们可以添加一个变量初始化表达式,然后根据变量值进行判断。

func main(){
    if err := Connect(); err != nil {
        fmt.Println(err)
        os.Exit(0)
    }
}    

Connect是一个带有返回值的函数,err := Connect()是一个变量初始化表达式。调用Connect()后,把错误返回值保存到err变量中。err != nil才是if判断表达式,当err不为空时,打印错误,并返回。这种写法可以把函数返回值与条件判断放在一行处理,且返回值的作用域被限制在if、else语句中。

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


4. if语句使用的tips

  • 条件表达式不需要使用括号将条件包含起来
  • 条件表达式支持一个变量初始化表达式(可以是多变量并行方式)
func main() {
    a := true
    if a, b, c := 1, 2, 3; a+b+c > 6 {
        fmt.Println("大于6")
    } else {
        fmt.Println("小于等于6")
        fmt.Println(a)
    }
    
    fmt.Println(a)
}
  • 大括号{}必须存在,即使只有一行语句
  • 左右大括号必须和条件表达式或else在同一行
  • 在if之后,条件语句之前,可以添加变量初始化语句,使用;进行分隔
  • 在有返回值的函数中,最终的return不能在条件语句中
  • 初始化语句中的变量为block级别,同时隐藏外部同名变量

以上是关于go语言学习笔记 — 基础 — 控制流:if条件(分支)语句的主要内容,如果未能解决你的问题,请参考以下文章

go语言学习笔记 — 基础 — 控制流:switch分支选择语句

go语言学习笔记 — 基础 — 控制流:流程控制

go语言学习笔记 — 基础 — 控制流:break, continue循环控制语句

学习笔记9控制流语句-IF条件判断

go语言学习笔记 — 基础 — 控制流:for循环语句

Go语言基础之流程控制