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分支选择语句