go语言学习 第4章:流程控制

第4章:流程控制

在编程中,流程控制语句是控制程序执行顺序的关键工具。它们允许我们根据不同的条件执行不同的代码块,从而实现复杂的逻辑。Go语言提供了多种流程控制语句,包括条件语句(ifswitch)和循环语句(forrange)。本章将详细介绍这些流程控制语句的使用方法和注意事项。

一、条件语句

(一)if语句

if语句是最基本的条件语句,用于根据条件表达式的值决定是否执行某个代码块。在Go语言中,if语句的语法如下:

go 复制代码
if 条件表达式 {
    // 逻辑代码
}
1. 单分支if

单分支if语句只有在条件表达式为true时才会执行代码块。例如:

go 复制代码
package main

import "fmt"

func main() {
    var count int = 20
    if count < 30 {
        fmt.Println("库存不足")
    }
}

在这个例子中,如果count小于30,程序会输出"库存不足"。

2. 双分支if

双分支if语句在条件表达式为true时执行一个代码块,否则执行另一个代码块。语法如下:

go 复制代码
if 条件表达式 {
    // 逻辑代码1
} else {
    // 逻辑代码2
}

例如:

go 复制代码
package main

import "fmt"

func main() {
    var count int = 70
    if count < 30 {
        fmt.Println("库存不足")
    } else {
        fmt.Println("库存充足")
    }
}

在这个例子中,如果count小于30,程序会输出"库存不足",否则输出"库存充足"。

3. 多分支if

多分支if语句通过多个else if子句来处理多个条件。语法如下:

go 复制代码
if 条件表达式1 {
    // 逻辑代码1
} else if 条件表达式2 {
    // 逻辑代码2
} else {
    // 逻辑代码n
}

例如:

go 复制代码
package main

import "fmt"

func main() {
    var score int = 85
    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级别")
    }
}

在这个例子中,程序会根据score的值输出相应的成绩级别。

(二)switch语句

switch语句用于根据不同的值选择执行不同的代码块。它比多个if语句更简洁,也更容易阅读。switch语句的语法如下:

go 复制代码
switch 表达式 {
case 值1:
    // 语句块1
case 值2:
    // 语句块2
...
default:
    // 默认语句块
}
1. 基本用法

例如:

go 复制代码
package main

import "fmt"

func main() {
    var score int = 85
    switch score / 10 {
    case 10:
        fmt.Println("您的等级为A级")
    case 9:
        fmt.Println("您的等级为A级")
    case 8:
        fmt.Println("您的等级为B级")
    case 7:
        fmt.Println("您的等级为C级")
    case 6:
        fmt.Println("您的等级为D级")
    default:
        fmt.Println("您的等级为E级")
    }
}

在这个例子中,程序会根据score的值输出相应的成绩级别。

2. 特殊用法
  • 省略表达式switch语句可以不带表达式,直接作为if语句的替代品。
go 复制代码
package main

import "fmt"

func main() {
    var score int = 85
    switch {
    case score >= 90:
        fmt.Println("您的成绩为A级别")
    case score >= 80:
        fmt.Println("您的成绩为B级别")
    case score >= 70:
        fmt.Println("您的成绩为C级别")
    case score >= 60:
        fmt.Println("您的成绩为D级别")
    default:
        fmt.Println("您的成绩为E级别")
    }
}
  • fallthrough关键字fallthrough关键字可以用来实现switch语句的穿透,即执行完当前case后继续执行下一个case
go 复制代码
package main

import "fmt"

func main() {
    var score int = 85
    switch score / 10 {
    case 10:
        fmt.Println("您的等级为A级")
        fallthrough
    case 9:
        fmt.Println("您的等级为A级")
        fallthrough
    case 8:
        fmt.Println("您的等级为B级")
    }
}

二、循环语句

(一)for循环

for循环是Go语言中最基本的循环语句,用于重复执行某个代码块。for循环的语法如下:

go 复制代码
for 初始表达式; 布尔表达式; 迭代因子 {
    // 循环体
}
1. 基本用法

例如:

go 复制代码
package main

import "fmt"

func main() {
    sum := 0
    for i := 1; i <= 5; i++ {
        sum += i
    }
    fmt.Println("1到5的和为:", sum)
}

在这个例子中,程序会计算1到5的和,并输出结果。

2. 无限循环

如果省略for循环的条件表达式,可以创建一个无限循环。例如:

go 复制代码
package main

import "fmt"

func main() {
    for {
        fmt.Println("这是一个无限循环")
        break // 使用break语句退出循环
    }
}
3. 灵活的for循环

for循环的初始表达式和迭代因子可以省略,使其更加灵活。例如:

go 复制代码
package main

import "fmt"

func main() {
    i := 1
    for i <= 5 {
        fmt.Println(i)
        i++
    }
}

(二)for-range循环

for-range循环是Go语言中用于遍历集合(如数组、切片、字符串、映射等)的专用循环语句。语法如下:

go 复制代码
for key, value := range collection {
    // 循环体
}
1. 遍历数组和切片

例如:

go 复制代码
package main

import "fmt"

func main() {
    arr := [5]int{1, 2, 3, 4, 5}
    for index, value := range arr {
        fmt.Printf("索引:%d, 值:%d\n", index, value)
    }
}
2. 遍历字符串

例如:

go 复制代码
package main

import "fmt"

func main() {
    str := "hello, Golang!"
    for index, runeValue := range str {
        fmt.Printf("索引:%d, 字符:%c\n", index, runeValue)
    }
}
3. 遍历映射

例如:

go 复制代码
package main

import "fmt"

func main() {
    m := map[string]int{"a": 1, "b": 2, "c": 3}
    for key, value := range m {
        fmt.Printf("键:%s, 值:%d\n", key, value)
    }
}

三、循环控制语句

(一)break语句

break语句用于终止循环的执行。例如:

go 复制代码
package main

import "fmt"

func main() {
    for i := 1; i <= 10; i++ {
        if i == 5 {
            break
        }
        fmt.Println(i)
    }
}

在这个例子中,当i等于5时,循环会终止。

(二)continue语句

continue语句用于跳过当前循环的剩余部分,直接进入下一次迭代。例如:

go 复制代码
package main

import "fmt"

func main() {
    for i := 1; i <= 10; i++ {
        if i%2 == 0 {
            continue
        }
        fmt.Println(i
相关推荐
研究司马懿9 小时前
【云原生】Gateway API高级功能
云原生·go·gateway·k8s·gateway api
梦想很大很大1 天前
使用 Go + Gin + Fx 构建工程化后端服务模板(gin-app 实践)
前端·后端·go
lekami_兰1 天前
MySQL 长事务:藏在业务里的性能 “隐形杀手”
数据库·mysql·go·长事务
却尘1 天前
一篇小白也能看懂的 Go 字符串拼接 & Builder & cap 全家桶
后端·go
ん贤1 天前
一次批量删除引发的死锁,最终我选择不加锁
数据库·安全·go·死锁
mtngt112 天前
AI DDD重构实践
go
Grassto3 天前
12 go.sum 是如何保证依赖安全的?校验机制源码解析
安全·golang·go·哈希算法·go module
Grassto5 天前
11 Go Module 缓存机制详解
开发语言·缓存·golang·go·go module
程序设计实验室6 天前
2025年的最后一天,分享我使用go语言开发的电子书转换工具网站
go
我的golang之路果然有问题6 天前
使用 Hugo + GitHub Pages + PaperMod 主题 + Obsidian 搭建开发博客
golang·go·github·博客·个人开发·个人博客·hugo