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
相关推荐
DemonAvenger12 小时前
Go并发编程:内存同步与竞态处理
性能优化·架构·go
叹一曲当时只道是寻常13 小时前
xmind转换为markdown
go·xmind
程序员爱钓鱼14 小时前
Go 并发编程基础:通道(Channel)的使用
后端·google·go
fashia15 小时前
Java转Go日记(六十):gin其他常用知识
开发语言·后端·golang·go·gin
DemonAvenger1 天前
Go 大对象与小对象分配策略优化
性能优化·架构·go
seth1 天前
一个基于 Go 语言 开发的命令行版 V2EX 客户端,支持在终端内快速浏览主题、查看评论、切换节点及基础配置管理
go·iterm·v2ex
fashia2 天前
Java转Go日记(五十七):gin 中间件
开发语言·后端·golang·go·gin
余厌厌厌2 天前
go语言学习 第5章:函数
开发语言·学习·golang·go
程序员爱钓鱼2 天前
Go语言 并发编程基础:Goroutine 的创建与调度
后端·go·排序算法