控制结构
条件语句
if-else语句
go
age := 18
if age >= 18 {
fmt.Println("成年人")
} else {
fmt.Println("未成年人")
}if-else if-else语句
go
score := 85
if score >= 90 {
fmt.Println("优秀")
} else if score >= 80 {
fmt.Println("良好")
} else if score >= 60 {
fmt.Println("及格")
} else {
fmt.Println("不及格")
}if语句带初始化
go
// 在if语句中声明变量,作用域仅限于if块
if err := doSomething(); err != nil {
fmt.Println("发生错误:", err)
return
}循环语句
Go语言只有 for 循环,但可以模拟多种循环形式。
经典for循环
go
for i := 0; i < 5; i++ {
fmt.Println("第", i+1, "次循环")
}模拟while循环
go
j := 0
for j < 5 {
fmt.Println("j =", j)
j++
}无限循环
go
for {
// 会一直执行,需要break退出
fmt.Println("无限循环")
break
}break和continue
go
// break - 跳出循环
for i := 0; i < 10; i++ {
if i == 5 {
break // 当i等于5时退出循环
}
fmt.Println(i)
}
// continue - 跳过本次迭代
for i := 0; i < 5; i++ {
if i == 2 {
continue // 跳过i等于2的情况
}
fmt.Println(i)
}嵌套循环与标签
go
outer:
for i := 0; i < 3; i++ {
for j := 0; j < 3; j++ {
if i == 1 && j == 1 {
break outer // 跳出外层循环
}
fmt.Printf("i=%d, j=%d\n", i, j)
}
}range循环
go
// 遍历数组/切片
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)
}
// 忽略值
for index := range numbers {
fmt.Println("索引:", index)
}
// 遍历字符串
str := "Go语言"
for index, char := range str {
fmt.Printf("位置: %d, 字符: %c\n", index, char)
}
// 遍历map
scores := map[string]int{"数学": 95, "语文": 87}
for key, value := range scores {
fmt.Printf("%s: %d\n", key, value)
}switch语句
基本switch
go
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("周末")
}多值匹配
go
day := 6
switch day {
case 1, 2, 3, 4, 5:
fmt.Println("工作日")
case 6, 7:
fmt.Println("周末")
default:
fmt.Println("无效的日期")
}无表达式switch
go
score := 85
switch {
case score >= 90:
fmt.Println("优秀")
case score >= 80:
fmt.Println("良好")
case score >= 60:
fmt.Println("及格")
default:
fmt.Println("不及格")
}fallthrough穿透
go
num := 1
switch num {
case 1:
fmt.Println("一")
fallthrough // 继续执行下一个case
case 2:
fmt.Println("二")
default:
fmt.Println("其他")
}
// 输出: 一 二带初始化的switch
go
switch score := calculateScore(); {
case score >= 90:
fmt.Println("优秀")
case score >= 60:
fmt.Println("及格")
default:
fmt.Println("不及格")
}goto语句
注意
goto 语句应谨慎使用,过度使用会导致代码难以理解。
go
func main() {
i := 0
Start:
if i < 5 {
fmt.Println(i)
i++
goto Start
}
fmt.Println("结束")
}完整示例
go
package main
import "fmt"
func main() {
// 打印九九乘法表
fmt.Println("九九乘法表:")
for i := 1; i <= 9; i++ {
for j := 1; j <= i; j++ {
fmt.Printf("%d×%d=%d\t", j, i, i*j)
}
fmt.Println()
}
// 判断闰年
year := 2024
if (year%4 == 0 && year%100 != 0) || year%400 == 0 {
fmt.Printf("%d年是闰年\n", year)
} else {
fmt.Printf("%d年不是闰年\n", year)
}
}