【2.4 golang中的循环语句for】

news/2024/11/14 20:23:26/

-

循环语句for

1. 循环语句for

1.1.1. Golang for支持三种循环方式,包括类似 while 的语法。

for循环是一个循环控制结构,可以执行指定次数的循环。

语法

Go语言的For循环有3中形式,只有其中的一种使用分号。

    for init; condition; post { }for condition { }for { }init: 一般为赋值表达式,给控制变量赋初值;condition: 关系表达式或逻辑表达式,循环控制条件;post: 一般为赋值表达式,给控制变量增量或减量。for语句执行过程如下:①先对表达式 init 赋初值;②判别赋值表达式 init 是否满足给定 condition 条件,若其值为真,满足循环条件,则执行循环体内语句,然后执行 post,进入第二次循环,再判别 condition;否则判断 condition 的值为假,不满足条件,就终止for循环,执行循环体外语句。
s := "abc"for i, n := 0, len(s); i < n; i++ { // 常见的 for 循环,支持初始化语句。println(s[i])
}n := len(s)
for n > 0 {                // 替代 while (n > 0) {}println(s[n])        // 替代 for (; n > 0;) {}n-- 
}for {                    // 替代 while (true) {}println(s)            // 替代 for (;;) {}
}

不要期望编译器能理解你的想法,在初始化语句中计算出全部结果是个好主意。

package mainfunc length(s string) int {println("call length.")return len(s)
}func main() {s := "abcd"for i, n := 0, length(s); i < n; i++ {     // 避免多次调用 length 函数。println(i, s[i])} 
}

输出:

    call length.0 971 982 993 100

实例:

package mainimport "fmt"func main() {var b int = 15var a intnumbers := [6]int{1, 2, 3, 5}/* for 循环 */for a := 0; a < 10; a++ {fmt.Printf("a 的值为: %d\n", a)}for a < b {a++fmt.Printf("a 的值为: %d\n", a)}for i,x:= range numbers {fmt.Printf("第 %d 位 x 的值 = %d\n", i,x)}   
}

以上实例运行输出结果为:

    a 的值为: 0a 的值为: 1a 的值为: 2a 的值为: 3a 的值为: 4a 的值为: 5a 的值为: 6a 的值为: 7a 的值为: 8a 的值为: 9a 的值为: 1a 的值为: 2a 的值为: 3a 的值为: 4a 的值为: 5a 的值为: 6a 的值为: 7a 的值为: 8a 的值为: 9a 的值为: 10a 的值为: 11a 的值为: 12a 的值为: 13a 的值为: 14a 的值为: 15第 0 位 x 的值 = 1第 1 位 x 的值 = 2第 2 位 x 的值 = 3第 3 位 x 的值 = 5第 4 位 x 的值 = 0第 5 位 x 的值 = 0

1.1.2. 循环嵌套

在 for 循环中嵌套一个或多个 for 循环

语法

以下为 Go 语言嵌套循环的格式:

for [condition |  ( init; condition; increment ) | Range]
{for [condition |  ( init; condition; increment ) | Range]{statement(s)}statement(s)
}

实例:

以下实例使用循环嵌套来输出 2 到 100 间的素数:

package mainimport "fmt"func main() {/* 定义局部变量 */var i, j intfor i=2; i < 100; i++ {for j=2; j <= (i/j); j++ {if(i%j==0) {break // 如果发现因子,则不是素数}}if(j > (i/j)) {fmt.Printf("%d  是素数\n", i)}}  
}

以上实例运行输出结果为:

    2  是素数3  是素数5  是素数7  是素数11  是素数13  是素数17  是素数19  是素数23  是素数29  是素数31  是素数37  是素数41  是素数43  是素数47  是素数53  是素数59  是素数61  是素数67  是素数71  是素数73  是素数79  是素数83  是素数89  是素数97  是素数

1.1.3. 无限循环

如过循环中条件语句永远不为 false 则会进行无限循环,我们可以通过 for 循环语句中只设置一个条件表达式来执行无限循环:

package mainimport "fmt"func main() {for true  {fmt.Printf("这是无限循环。\n");}
}

http://www.ppmy.cn/news/30128.html

相关文章

【Linux】CentOS7操作系统安装nginx实战(多种方法,超详细)

文章目录前言一. 实验环境二. 使用yum安装nginx2.1 添加yum源2.1.1 使用官网提供的源地址&#xff08;方法一&#xff09;2.1.2 使用epel的方式进行安装&#xff08;方法二&#xff09;2.2 开始安装nginx2.3 启动并进行测试2.4 其他的一些用法&#xff1a;三. 编译方式安装ngin…

博客系统程序(页面设计)

咱们学习javaEE的目的就是完成一个网站.在当前学习的基础上,已经可以完成我们的博客系统的页面的设计了!!!首先我们要进行统筹规划:首先我们的博客页面将会有4个页面:1.博客列表页2.博客详情页显示一个博客的具体内容:3.登录页就是用户输入用户名和页面的地方4.博客编辑页发布新…

ios 通过搜索设备MAC地址绑定

最近做了一个物联网项目,涉及到了设备绑定这块,需要了解一下iOS BLE与设备绑定的相关知识点,第一次接触蓝牙相关的项目,所以开始熟悉蓝牙的相关信息。没有去深入研究BabyTooth库&#xff0c;只是感觉CoreBluetooth已经让我更好的理解整个流程这个物联网项目的设备绑定流程是需要…

python日志模块,loggin模块

python日志模块&#xff0c;loggin模块loggin模块日志的格式处理器种类日志格式的参数使用loggin模块 logging库采用模块化方法&#xff0c;并提供了几类组件&#xff1a;记录器&#xff0c;处理程序&#xff0c;过滤器和格式化程序。 记录器&#xff08;Logger&#xff09;&a…

[C++]vector模拟实现

目录 前言&#xff1a; 1. vector结构 2. 默认成员函数 2.1 构造函数 无参构造&#xff1a; 有参构造&#xff1a; 有参构造重载&#xff1a; 2.2 赋值运算符重载、拷贝构造&#xff08;难点&#xff09; 2.3 析构函数&#xff1a; 3. 扩容 3.1 reserve 3.2 resize…

【C++】类和对象补充知识点

&#x1f3d6;️作者&#xff1a;malloc不出对象 ⛺专栏&#xff1a;C的学习之路 &#x1f466;个人简介&#xff1a;一名双非本科院校大二在读的科班编程菜鸟&#xff0c;努力编程只为赶上各位大佬的步伐&#x1f648;&#x1f648; 目录前言一、再谈构造函数1.1 构造函数体赋…

解析MySQL 8.0 OCP(1Z0-908)考试中一道大部分同学都会做错的题目

一个用户有下面的权限: mysql>SHOW GRANTS FOR jsmith;---------------------------------------------------------------------- | Grants for jsmith% | ----------------------------------------------------------…

【Linux】P4 Linux 权限 chmod chown

Linux 权限认知权限信息chmod 修改权限chown 修改用户与用户组认知权限信息 序号1&#xff1a;文件、文件夹权限控制信息&#xff1b; 权限控制信息一共有十位 第 1 位&#xff1a; - 表示文件&#xff0c;d 表示文件夹&#xff0c;l 表示软链接 第 2~4 位&#xff1a; 所属用…