从前有座山,山里有座庙,庙里有个老和尚在给小和尚讲故事。
老和尚坐在禅房里,古朴的庙宇在清晨的阳光中显得庄严肃穆。小和尚们整齐地坐在地板上,期待着老和尚的故事。
老和尚眼含慈爱,开始讲述循环的故事:“很久很久以前,这座山就在这里了。它见证了无数的日出日落,风吹雨打,却依然屹立不倒。”
小和尚们聚精会神地听着,仿佛能够感受到那座山的沧桑岁月。
“于是,有人在山的脚下建了一座庙,庙里有我们一直居住的地方。这个庙,像一颗心脏,连接着山和人。”老和尚的语气宛如山风,平和而深沉。
小和尚们的眼神中闪烁着好奇,仿佛能够看见那个庙的身影。
老和尚微笑着继续说:“而我,是这个庙的守护者,也是你们的导师。我曾年轻过,也曾经历过无数的忧愁和喜悦。但山始终在,庙也一直在,就像生命中的循环一样。”
小和尚们听得入迷,他们开始意识到这个故事不仅仅是对山和庙的描述,更是一种对生命和循环的思考。
老和尚温和地看着小和尚们,继续说:“每一个日落都预示着新的一天的开始,循环着生命的轨迹。就像我们坐在一起,讲着故事,这个瞬间也在不断地循环着。”
小和尚们陷入沉思,仿佛领悟到了老和尚所言的深意。
“现在,你们明白了吗?”老和尚微笑着看着小和尚们。
小和尚们齐心协力地点了点头,仿佛在告别这个故事,他们也开始了自己的循环,去体验生命中的日出日落,感受着循环的美好。
于是,从前有座山,山里有座庙,庙里有个老和尚在给小和尚讲故事。这个故事,就这样循环着,在山的守护下,庙的温馨中,生生不息。
完整的循环
在Go语言中,循环是通过for关键字实现的,它具有四个主要的要素:
-
初始化语句(Initialization):
- 初始化语句在循环开始前执行一次,用于初始化控制循环的变量。
- 这可以是一个变量声明,或者是已经存在的变量的赋值语句。
for i := 0; i < 5; i++ { // 循环体 }在这个例子中,
i := 0是初始化语句,将变量i初始化为0。 -
条件表达式(Condition):
- 条件表达式是一个布尔表达式,用于决定是否继续循环。
- 当条件表达式的结果为
true时,循环会继续执行;当结果为false时,循环结束。 在这个例子中,条件表达式是i < 5。
-
后置语句(Post statement):
- 后置语句在每次循环迭代结束后执行,通常用于更新控制循环的变量。
- 这可以是一个递增或递减操作,或者其他对循环控制变量的修改。
在这个例子中,
i++是后置语句,每次循环结束后将i增加1。
-
循环体(Body):
- 循环体是由花括号
{}包裹的一组语句,表示每次循环迭代要执行的代码块。 - 循环体中的代码会不断重复执行,直到条件表达式的结果为
false。 在这个例子中,fmt.Println(i)就是循环体。
- 循环体是由花括号
综合上述四要素,一个完整的for循环的结构如下:
for 初始化语句; 条件表达式; 后置语句 {
// 循环体
}
这样的循环结构提供了灵活性,可以满足不同的迭代需求。同时,Go语言中也支持更简洁的循环形式,如for range循环,用于迭代数组、切片、映射等数据结构。
省略的循环
在Go语言中,for循环中的初始化语句、条件表达式、后置语句都是可选的,可以省略其中的任意一个或多个。这种灵活性提供了更简洁的写法,适用于不同的迭代场景。
-
初始化语句省略:
- 如果不需要在循环开始前进行初始化操作,可以省略初始化语句。
sum := 0 for sum < 10 { sum += 1 }在这个例子中,省略了初始化语句,循环开始前不需要额外的初始化操作,直接进入条件判断。
-
条件表达式省略:
- 如果希望循环无限执行或者在循环体内使用了
break语句来控制循环结束,可以省略条件表达式。
sum := 0 for { if sum >= 10 { break } sum += 1 }在这个例子中,省略了条件表达式,通过在循环体内部使用
break来控制循环结束。 - 如果希望循环无限执行或者在循环体内使用了
-
后置语句省略:
- 如果不需要在每次循环迭代结束后执行额外的操作,可以省略后置语句。
sum := 0 for sum < 10 { sum += 1 }在这个例子中,省略了后置语句,循环体内部执行了
sum += 1操作,无需在循环结束后再进行操作。 -
完全省略:
- 如果所有三个要素都不需要,可以使用一个空的
for{}形式,表示一个无限循环。
sum := 0 for { // 无限循环 if sum >= 10 { break } sum += 1 }在这个例子中,省略了初始化语句、条件表达式和后置语句,通过
break在循环体内控制循环的结束。 - 如果所有三个要素都不需要,可以使用一个空的
这种省略形式使得Go语言的for循环更加灵活,可以根据实际需要选择性地省略其中的任意一个或多个要素。这在编写简单而清晰的循环代码时非常有用。
练习
package main
import "fmt"
func main() {
// 第一个循环:使用简化的初始化语句和省略后置语句形式
i := 1
for i <= 3 {
fmt.Println(i)
i = i + 1
}
// 第二个循环:使用完整形式,包括初始化语句、条件表达式、后置语句
for j := 7; j < 9; j++ {
fmt.Println(j)
}
// 第三个循环:无限循环形式,通过 break 语句在循环体内控制结束
for {
fmt.Println("loop")
break
}
// 第四个循环:使用 continue 语句跳过偶数,打印奇数
for n := 0; n <= 5; n++ {
// 检查 n 是否为偶数
if n%2 == 0 {
// 如果是偶数,跳过当前迭代,进入下一次循环
continue
}
fmt.Println(n)
}
}