控制流
if 语句
package main
import "fmt"
func main() {
// 基本 if 语句
age := 18
if age >= 18 {
fmt.Println("成年人")
}
// if-else 语句
if age >= 18 {
fmt.Println("成年人")
} else {
fmt.Println("未成年人")
}
// if-else if-else 语句
score := 85
if score >= 90 {
fmt.Println("优秀")
} else if score >= 80 {
fmt.Println("良好")
} else if score >= 60 {
fmt.Println("及格")
} else {
fmt.Println("不及格")
}
// 带初始化语句的 if
if num := 10; num % 2 == 0 {
fmt.Println(num, "是偶数")
} else {
fmt.Println(num, "是奇数")
}
}
switch 语句
package main
import "fmt"
func main() {
// 基本 switch
day := 3
switch day {
case 1:
fmt.Println("星期一")
case 2:
fmt.Println("星期二")
case 3:
fmt.Println("星期三")
case 4:
fmt.Println("星期四")
case 5:
fmt.Println("星期五")
default:
fmt.Println("周末")
}
// 多个 case 共享处理
grade := "B"
switch grade {
case "A", "B", "C":
fmt.Println("及格")
case "D", "F":
fmt.Println("不及格")
default:
fmt.Println("未知等级")
}
// 无表达式的 switch(类似 if-else if)
score := 75
switch {
case score >= 90:
fmt.Println("优秀")
case score >= 70:
fmt.Println("良好")
case score >= 60:
fmt.Println("及格")
default:
fmt.Println("不及格")
}
// 带初始化语句的 switch
switch num := 15; {
case num < 0:
fmt.Println("负数")
case num == 0:
fmt.Println("零")
case num > 0:
fmt.Println("正数")
}
}
for 循环
Go 语言只有一种循环结构:for 循环。
package main
import "fmt"
func main() {
// 标准 for 循环
for i := 0; i < 5; i++ {
fmt.Println(i)
}
// while 风格(只有条件)
i := 0
for i < 5 {
fmt.Println(i)
i++
}
// 无限循环
// for {
// fmt.Println("无限循环")
// }
// 遍历切片/数组
numbers := []int{1, 2, 3, 4, 5}
for index, value := range numbers {
fmt.Printf("索引 %d: 值 %d\n", index, value)
}
// 只需要值
for _, value := range numbers {
fmt.Println("值:", value)
}
// 遍历 map
colors := map[string]string{
"red": "#FF0000",
"green": "#00FF00",
"blue": "#0000FF",
}
for key, value := range colors {
fmt.Printf("%s: %s\n", key, value)
}
// 遍历字符串
str := "Hello"
for index, char := range str {
fmt.Printf("位置 %d: %c\n", index, char)
}
// break 和 continue
for i := 0; i < 10; i++ {
if i == 3 {
continue // 跳过本次迭代
}
if i == 7 {
break // 退出循环
}
fmt.Println(i)
}
}
defer 语句
defer 语句用于延迟函数的执行,直到包含它的函数返回。常用于资源清理。
package main
import "fmt"
func main() {
// defer 的执行顺序(后进先出)
defer fmt.Println("第一个 defer")
defer fmt.Println("第二个 defer")
defer fmt.Println("第三个 defer")
fmt.Println("主函数")
// defer 用于资源清理
processFile()
}
func processFile() {
fmt.Println("\n打开文件...")
// 假设打开了一个文件
defer fmt.Println("关闭文件")
fmt.Println("处理文件内容...")
}
panic 和 recover
panic 用于处理运行时错误,recover 用于从 panic 中恢复。
package main
import "fmt"
func main() {
// 正常情况
divide(10, 2)
// 会触发 panic 的情况
divide(10, 0)
fmt.Println("程序继续执行")
}
func divide(a, b int) {
defer func() {
if r := recover(); r != nil {
fmt.Println("恢复从 panic:", r)
}
}()
if b == 0 {
panic("除数不能为零")
}
result := a / b
fmt.Println("结果:", result)
}
goto 语句
package main
import "fmt"
func main() {
// goto 语句示例(谨慎使用)
i := 0
start:
fmt.Println(i)
i++
if i < 5 {
goto start
}
}