【Go】---流程控制语句
文章目录
- Go 语言流程控制语句
- 判断语句
- 1. if 语句
- 语法定义
- 使用规则
- 典型示例
- 注意事项
- 2. if-else 语句
- 语法定义
- 典型示例
- 3. if-else if-else 语句
- 语法定义
- 典型示例
- 注意事项
- 4. switch 语句
- 语法定义
- 使用规则
- 典型示例
- 带表达式的 switch
- 使用 fallthrough
- 循环语句
- 1. for 基本循环
- 语法定义
- 使用规则
- 典型示例
- 变体形式
- 2. for-range 循环
- 语法定义
- 使用规则
- 典型示例
- 循环控制语句
- 1. break 语句
- 2. continue 语句
- 3. goto 语句
- 综合示例
- 判断素数
- 斐波那契数列
Go 语言流程控制语句
注意
:
- switch 自动 break:Go 语言的 switch 语句会自动 break,需要使用 fallthrough 才能继续执行
- range 遍历:遍历 map 时顺序不固定,遍历字符串时按 Unicode 码点进行
判断语句
1. if 语句
语法定义
if condition {// 条件为真时执行的代码
}
使用规则
- 条件表达式必须是布尔类型
- 条件表达式可以不加括号
- 代码块必须使用大括号包围
典型示例
package mainimport "fmt"func main() {age := 18if age >= 18 {fmt.Println("您已成年")}
}
注意事项
- Go 语言中 if 语句的条件表达式不能省略大括号
- 条件表达式可以包含初始化语句
2. if-else 语句
语法定义
if condition {// 条件为真时执行的代码
} else {// 条件为假时执行的代码
}
典型示例
package mainimport "fmt"func main() {var is_login bool = trueif is_login {fmt.Println("用户已登录")} else {fmt.Println("用户未登录")}
}
3. if-else if-else 语句
语法定义
if condition1 {// 条件1为真时执行的代码
} else if condition2 {// 条件2为真时执行的代码
} else {// 所有条件都为假时执行的代码
}
典型示例
package mainimport "fmt"func main() {var score intfmt.Print("请输入成绩(0-100):")fmt.Scanln(&score)if score >= 90 {fmt.Println("A")} else if score >= 80 {fmt.Println("B")} else if score >= 70 {fmt.Println("C")} else if score >= 60 {fmt.Println("D")} else {fmt.Println("E")}
}
注意事项
- else if 可以有多个
- 条件判断按顺序执行,一旦某个条件满足,后续条件不再判断
4. switch 语句
语法定义
switch expression {
case value1:// expression == value1 时执行的代码
case value2:// expression == value2 时执行的代码
default:// 所有case都不匹配时执行的代码
}
使用规则
- 每个 case 后面不需要 break,Go 语言会自动 break
- 可以使用 fallthrough 关键字继续执行下一个 case
- expression 可以省略,此时相当于 switch true
典型示例
package mainimport "fmt"func main() {day := 3switch day {case 1:fmt.Println("星期一")case 2:fmt.Println("星期二")case 3:fmt.Println("星期三")case 4:fmt.Println("星期四")case 5:fmt.Println("星期五")case 6:fmt.Println("星期六")case 7:fmt.Println("星期日")default:fmt.Println("无效的日期")}
}
带表达式的 switch
package mainimport "fmt"func main() {score := 85switch {case score >= 90:fmt.Println("优秀")case score >= 80:fmt.Println("良好")case score >= 70:fmt.Println("中等")case score >= 60:fmt.Println("及格")default:fmt.Println("不及格")}
}
使用 fallthrough
package mainimport "fmt"func main() {num := 2switch num {case 1:fmt.Println("数字是 1")fallthroughcase 2:fmt.Println("数字是 2")fallthroughcase 3:fmt.Println("数字是 3")default:fmt.Println("其他数字")}
}
// 输出:
// 数字是 2
// 数字是 3
循环语句
1. for 基本循环
语法定义
for initialization; condition; post {// 循环体
}
使用规则
- initialization: 循环变量初始化
- condition: 循环继续的条件
- post: 每次循环后执行的操作
典型示例
package mainimport "fmt"func main() {// 基本 for 循环for i := 0; i < 5; i++ {fmt.Println(i)}// 输出: 0 1 2 3 4
}
变体形式
省略初始化语句
package mainimport "fmt"func main() {i := 0for ; i < 5; i++ {fmt.Println(i)}
}
省略后置语句
package mainimport "fmt"func main() {for i := 0; i < 5; {fmt.Println(i)i++}
}
无限循环
package mainimport "fmt"func main() {i := 0for {if i >= 5 {break}fmt.Println(i)i++}
}
2. for-range 循环
语法定义
for index, value := range collection {// 循环体
}
使用规则
- 用于遍历数组、切片、字符串、map、通道等集合类型
- 可以只接收索引或只接收值
- 遍历 map 时顺序不固定
典型示例
遍历数组/切片
package mainimport "fmt"func main() {numbers := []int{1, 2, 3, 4, 5}// 同时获取索引和值for index, value := range numbers {fmt.Printf("索引: %d, 值: %d\n", index, value)}// 只获取值for _, value := range numbers {fmt.Printf("值: %d\n", value)}// 只获取索引for index := range numbers {fmt.Printf("索引: %d\n", index)}
}
遍历字符串
package mainimport "fmt"func main() {str := "Hello, 世界"for index, char := range str {fmt.Printf("索引: %d, 字符: %c, Unicode: %U\n", index, char, char)}
}
遍历 map
package mainimport "fmt"func main() {studentScores := map[string]int{"张三": 85,"李四": 92,"王五": 78,}for name, score := range studentScores {fmt.Printf("姓名: %s, 分数: %d\n", name, score)}
}
循环控制语句
1. break 语句
用于提前终止循环
package mainimport "fmt"func main() {for i := 0; i < 10; i++ {if i == 5 {break}fmt.Println(i)}// 输出: 0 1 2 3 4
}
2. continue 语句
用于跳过当前循环的剩余代码,继续下一次循环
package mainimport "fmt"func main() {for i := 0; i < 10; i++ {if i%2 == 0 {continue}fmt.Println(i)}// 输出: 1 3 5 7 9
}
3. goto 语句
用于无条件跳转到指定的标签位置(不推荐使用)
package mainimport "fmt"func main() {i := 0start:if i < 5 {fmt.Println(i)i++goto start}
}
综合示例
判断素数
package mainimport "fmt"func isPrime(n int) bool {if n <= 1 {return false}for i := 2; i*i <= n; i++ {if n%i == 0 {return false}}return true
}func main() {for i := 1; i <= 20; i++ {if isPrime(i) {fmt.Printf("%d 是素数\n", i)} else {fmt.Printf("%d 不是素数\n", i)}}
}
斐波那契数列
package mainimport "fmt"func main() {n := 10a, b := 0, 1for i := 0; i < n; i++ {fmt.Print(a, " ")a, b = b, a+b}
}