0

0

Go 语言基础 - 循环语句

Go语言进阶学习

Go语言进阶学习

发布时间:2023-07-24 16:00:09

|

684人浏览过

|

来源于Go语言进阶学习

转载

go语言零基础开发内容管理系统课件
go语言零基础开发内容管理系统课件

go语言零基础开发内容管理系统课件

下载

go 语言里只有 for 一种循环语句,没有其他语言(比如 c 语言等)具有的 while 或者 do-while 循环。

for 循环语法

for initialisation; condition; post {  
}

initialisation 初始化语句只会被执行一次,初始化完成之后会检查 condition 条件是否为 true,如果是的话将会执行 {} 里的代码,接着会执行 post 语句。每次 {} 里的循环语句成功迭代后都会执行 post 语句,接着会重新检查 condition 是否为 true。如果为 true,则会继续执行循环语句,否则循环终止。

在 Go 中,initialisation、condition 和 post 这三这都是可选的。让我们来看一个例子以便更好地理解 for 循环。

示例

我们编写一个程序,使用 for 循环打印 1-10 的所有整数。

package main

import (  
    "fmt"
)

func main() {  
    for i := 1; i <= 10; i++ {
        fmt.Printf(" %d",i)
    }
}

执行

在上面代码,i 被初始化为 1,条件语句将检查 i

上面的代码打印输出:1 2 3 4 5 6 7 8 9 10

在 for 循环中声明的变量仅在循环体范围内可用。因此在 for 循环体之外是不能访问变量 i 的。

break

break 用于终止 for 循环并跳出循环继续执行 for 循环后面的语句。

我们修改下之前的代码,使用 break 语句实现只打印 1-5 之间所有整数。

package main

import (  
    "fmt"
)

func main() {  
    for i := 1; i <= 10; i++ {
        if i > 5 {
            break //loop is terminated if i > 5
        }
        fmt.Printf("%d ", i)
    }
    fmt.Printf("\nline after for loop")
}

执行

在上面的代码中,每次迭代都会检查 i 的值。如果 i 大于 5,则执行 break 并终止循环,然后执行 for 循环之后的 print 语句。

上面的程序会输出:

1 2 3 4 5  
line after for loop

continue

continue 语句用于跳过 for 循环的当前迭代。本次迭代中,for 循环里面、continue 语句之后的代码都不会执行,继续进行下一次迭代。

让我们编写一个程序,使用 continue 打印从 1-10 的所有奇数。

package main

import (  
    "fmt"
)

func main() {  
    for i := 1; i <= 10; i++ {
        if i%2 == 0 {
            continue
        }
        fmt.Printf("%d ", i)
    }
}

执行

在上面的代码行 if i%2 == 0,检查 i 除以 2 的余数是否为 0。如果为零,则该数为偶数,执行 continue 语句,则不会调用 continue 之后的 print 语句,并且循环继续进行下一次迭代。

上述程序的输出:1 3 5 7 9。

嵌套循环

一个 for 循环内部有另一个 for 循环称为嵌套 for 循环。

我们通过编写一个打印以下序列的程序来理解嵌套的 for 循环。

*
**
***
****
*****

下面的程序使用嵌套 for 循环打印上述序列。

第 8 行的变量 8 存储序列的行数,我们这里是 5。外部 for 循环将 i 从 0 迭代到 4,内部 for 循环将 j 从 0 迭代到 i 的当前值。内部循环为每次迭代打印 * ,外部循环在每次迭代结束时打印一个新行。

运行这个程序将会输出上面的有序序列。

package main

import (  
    "fmt"
)

func main() {  
    n := 5
    for i := 0; i < n; i++ {
        for j := 0; j <= i; j++ {
            fmt.Print("*")
        }
        fmt.Println()
    }
}

执行

标签

标签(label)可用于在内部 for 循环中断外部循环。让我们通过一个简单的例子来理解下:

package main

import (  
    "fmt"
)

func main() {  
    for i := 0; i < 3; i++ {
        for j := 1; j < 4; j++ {
            fmt.Printf("i = %d , j = %d\n", i, j)
        }

    }
}

执行

上面的程序比较容易理解,将会输出:

i = 0 , j = 1  
i = 0 , j = 2  
i = 0 , j = 3  
i = 1 , j = 1  
i = 1 , j = 2  
i = 1 , j = 3  
i = 2 , j = 1  
i = 2 , j = 2  
i = 2 , j = 3

上面的代码没什么特别的,我们继续往下看。

如果我们想实现当 i 和 j 相等时,停止打印该怎么办?我们需要做的是从内部循环破坏外部 for 循环。我们尝试在内部 for 循环判断当 i 和 j 相等时,执行 break 语句看能够实现中断外部 for 循环。

package main

import (  
    "fmt"
)

func main() {  
    for i := 0; i < 3; i++ {
        for j := 1; j < 4; j++ {
            fmt.Printf("i = %d , j = %d\n", i, j)
            if i == j {
                break
            }
        }

    }
}

执行

上面的代码,当判断 i 和 j 相等时,我们在内部 for 循环中会执行 break 语句,但这只会中断本次内部 for 循环,外部循环将继续执行。

程序输出:

i = 0 , j = 1  
i = 0 , j = 2  
i = 0 , j = 3  
i = 1 , j = 1  
i = 2 , j = 1  
i = 2 , j = 2

这显然不是我们预期的输出。当 i 和 j 都相等时,即它们都等于 1 时,我们需要停止打印。

这时候标签(label)就可以派上用场了。标签可用于中断外部循环,让我们用 label 重写上面的程序。

package main

import (  
    "fmt"
)

func main() {  
outer:  
    for i := 0; i < 3; i++ {
        for j := 1; j < 4; j++ {
            fmt.Printf("i = %d , j = %d\n", i, j)
            if i == j {
                break outer
            }
        }

    }
}

执行

在上面的代码,我们在第 8 行循环的外部添加了名为 outer 的标签,在第 13 行通过指定跳转到该标签来终止外部循环,当 i 和 j 相等时,程序将停止打印。

执行代码输出:

i = 0 , j = 1  
i = 0 , j = 2  
i = 0 , j = 3  
i = 1 , j = 1

更多示例

我们通过更多的示例学习下 for 语句的不用用法。

下面的代码打印从 0 到 10 的所有偶数。

package main

import (  
    "fmt"
)

func main() {  
    i := 0
    for ;i <= 10; { // initialisation and post are omitted
        fmt.Printf("%d ", i)
        i += 2
    }
}

执行

我们已经知道,for 语句中 initialisation、condition 和 post 都是可选的。上面代码中,initialisation 和 post 都被忽略了,在循环外部,变量 i 已经初始化为 0。只要 i

上述代码的 for 循环语句的分号也可以省略。这种格式可以认为是 while 循环的替代方案。上面的代码可以重写为:

package main

import (  
    "fmt"
)

func main() {  
    i := 0
    for i <= 10 { //semicolons are ommitted and only condition is present
        fmt.Printf("%d ", i)
        i += 2
    }
}

执行

可以在 for 语句中声明和操作多个变量。让我们编写一个程序,使用多个变量声明打印以下序列。

10 * 1 = 10  
11 * 2 = 22  
12 * 3 = 36  
13 * 4 = 52  
14 * 5 = 70  
15 * 6 = 90  
16 * 7 = 112  
17 * 8 = 136  
18 * 9 = 162  
19 * 10 = 190
package main

import (  
    "fmt"
)

func main() {  
    for no, i := 10, 1; i <= 10 && no <= 19; i, no = i+1, no+1 { //multiple initialisation and increment
        fmt.Printf("%d * %d = %d\n", no, i, no*i)
    }

}

执行

在上面的代码中,no 和 i 分别被声明和初始化为 10 和 1,每次迭代结束时都递增 1。在 condition 条件中使用布尔运算符 && 来确保 i 小于或等于 10 并且 no 小于或等于 19。

无限循环

无限循环的语法如下:

for {  
}

下面的代码将会循环不停地打印 Hello World。

package main

import "fmt"

func main() {  
    for {
        fmt.Println("Hello World")
    }
}

如果你在 go playground 中运行上面程序,将会报错:“process took too long”。在本地环境执行时将无限打印 Hello World。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end=' ', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

192

2023.09.27

python print用法与作用
python print用法与作用

本专题整合了python print的用法、作用、函数功能相关内容,阅读专题下面的文章了解更多详细教程。

19

2026.02.03

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1566

2023.10.24

Go语言中的运算符有哪些
Go语言中的运算符有哪些

Go语言中的运算符有:1、加法运算符;2、减法运算符;3、乘法运算符;4、除法运算符;5、取余运算符;6、比较运算符;7、位运算符;8、按位与运算符;9、按位或运算符;10、按位异或运算符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

241

2024.02.23

php三元运算符用法
php三元运算符用法

本专题整合了php三元运算符相关教程,阅读专题下面的文章了解更多详细内容。

150

2025.10.17

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

846

2023.08.22

while的用法
while的用法

while的用法是“while 条件: 代码块”,条件是一个表达式,当条件为真时,执行代码块,然后再次判断条件是否为真,如果为真则继续执行代码块,直到条件为假为止。本专题为大家提供while相关的文章、下载、课程内容,供大家免费下载体验。

106

2023.09.25

java中break的作用
java中break的作用

本专题整合了java中break的用法教程,阅读专题下面的文章了解更多详细内容。

120

2025.10.15

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Rust 教程
Rust 教程

共28课时 | 6.8万人学习

Kotlin 教程
Kotlin 教程

共23课时 | 4.3万人学习

Go 教程
Go 教程

共32课时 | 6.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号