【入门】Go语言流程控制

发布时间 2023-03-26 22:35:26作者: 躺平摆烂

一、if判断

1.1 单if结构

语法:

if 条件判断 {
	代码句
}

案例:判断是否成年了

package main

import "fmt"

func main() {
	var age uint
	fmt.Println("请输入您的年龄:")
	fmt.Scan(&age)

	if age >= 18 {
		fmt.Printf("已经成年了!")
	}
}

代码输出内容:

请输入您的年龄:
22
已经成年了!

1.2 if..else结构

语法:

if 条件判断 {
	代码句
} else {
  代码句
}

案例:判断是否成年了如果小于18则打印未成年

package main

import "fmt"

func main() {
	var age uint
	fmt.Println("请输入您的年龄:")
	fmt.Scan(&age)

	if age >= 18 {
		fmt.Printf("已经成年了!")
	} else {
		fmt.Printf("还未成年!")
	}
}

代码输出内容:

请输入您的年龄:
17
还未成年!

1.3 if...else if...else结构

语法:

if 条件判断 {
	代码句
} else if 条件判断 {
  代码句
} else if 条件判断 {
  代码句
} else {
}

案例:判断成绩

package main

import "fmt"

func main() {
	var score int
	fmt.Println("请输入您的成绩:")
	fmt.Scan(&score)
	if score == 100 {
		fmt.Printf("您的成绩是:【%v】,满分!", score)
	} else if score >= 80 && score < 100 {
		fmt.Printf("您的成绩是:【%v】,优秀!", score)
	} else if score >= 60 && score < 80 {
		fmt.Printf("您的成绩是:【%v】,及格了!", score)
	} else if score >= 0 && score < 60 {
		fmt.Printf("您的成绩是:【%v】,没及格!", score)
	} else {
		fmt.Printf("输入成绩无效")
	}
}

代码输出内容:

请输入您的成绩:
100
您的成绩是:【100】,满分!

请输入您的成绩:
70
您的成绩是:【70】,及格了!

案例:模拟用户登入系统,账号:admin、密码:666666

package main

import "fmt"

func main() {
	var user string
	var password string
	fmt.Printf("请输入账号:")
	fmt.Scan(&user)
	fmt.Printf("请输入密码:")
	fmt.Scan(&password)

	if user == "admin" && password == "666666" {
		fmt.Println("登入系统成功!")
	} else if user == "admin" {
		fmt.Println("密码输入错误!")
	} else if password == "666666" {
		fmt.Println("账号输入错误!")
	} else {
		fmt.Println("账号密码输入错误!")
	}
}

代码输出内容:

请输入账号:admin
请输入密码:666666
登入系统成功!

请输入账号:admin
请输入密码:123456
密码输入错误!

请输入账号:ad1
请输入密码:888888
账号密码输入错误!

请输入账号:root
请输入密码:666666
账号输入错误!

1.4 if嵌套

案例:输入公交卡余额,只要超过2元,就可以上公交车,上车后如果有空位置就可以坐下

package main

import "fmt"

func main() {
	var money float64
	fmt.Println("请输入当前余额:")
	fmt.Scan(&money)

	if money >= 2 {
		fmt.Println("可以上车啦!")
		var count uint
		fmt.Println("请输入当前公交座位数:")
		fmt.Scan(&count)
		if count > 0 {
			fmt.Println("有空余座位,您可以找空位置坐!")
		} else {
			fmt.Println("没空余座位,您只能站着!")
		}
	} else {
		fmt.Println("当前余额不足2元,您不能上车!")
	}
}

代码输出内容:

请输入当前余额:
2
可以上车啦!
请输入当前公交座位数:
0
没空余座位,您只能站着!

案例:判断是否达到工作年龄,如果达到,判断工作城市,输出不通内容

package main

import "fmt"

func main() {
	var age uint8
	var work string
	fmt.Println("请输入您的年龄:")
	fmt.Scan(&age)
	if age >= 18 {
		fmt.Println("请输入您的工作地点:")
		fmt.Scan(&work)
		if work == "北京" {
			fmt.Printf("%s,是一个快节奏城市,加油...", work)
		} else if work == "上海" {
			fmt.Printf("%s,是一个保守的城市,加油...", work)
		} else if work == "成都" {
			fmt.Printf("%s,是一个慢节奏的城市,这里工作肯定很愉快...", work)
		} else {
			fmt.Printf("%s,城市风景肯定很美...", work)
		}
	} else {
		fmt.Println("未成年不能参加工作")
	}
}

代码输入内容:

请输入您的年龄:
18
请输入您的工作地点:
北京
北京,是一个快节奏城市,加油...

二、switch判断

switch语句用于基于不同条件执行不同动作,每一个case分支都是唯一的,从上到下逐一测试,指到匹配为止。

2.1 switch语法一

语法:

switch 表达式 {
	case 值1,值2:
		语句块1
	case 值3,值4:
		语句块2
	default:
		语句块3
}
  • 先执行表达式,得到值,然后和 case 的表达式进行比较,如果相等, 就匹配到,然后执行对应的 case 的语句块,然后退出 switch 控制。
  • 如果 switch 的表达式的值没有和任何的 case 的表达式匹配成功,则执行 default 的语句块。执行后退出 switch 的控制。
  • golang 中的 case 语句块不需要写 break , 因为默认会有,即在默认情况下,当程序执行完 case 语句块后,就直接退出该 switch 控制结构。

案例:

package main

import "fmt"

func main() {
	var num1 int32 = 10
	var num2 int32 = 20

	switch num1 {
	case num2, 10, 5: // 判断 num1 值是否匹配为 num2, 10, 5
		fmt.Println("OK~")
	default:
		fmt.Println("NO!")

	}
}

代码输出内容:

OK~

2.2 switch语法二

语法:

switch {                 
	case 表达式1:
		语句块1
	case 表达式2:
		语句块2
	default:
		语句块3
	}

案例:

package main

import "fmt"

func main() {
	age := 30
	switch {                 
	case age == 20:
		fmt.Printf("age == 20")
	case age == 30:
		fmt.Printf("age == 30")
	default:
		fmt.Printf("没有匹配到~")
	}
}

代码输出内容:

age == 30

三、拓展

3.1 switch和if分支对比

  • 如果判断的具体数值不多,而且符合整数、浮点数、字符、字符串这几种类型。建议使用 swtich语句,简洁高效。
  • 其他情况:对区间判断和结果为 bool 类型的判断使用 if,if 的使用范围更广。