Golang入门教程5:循环之美

108 阅读5分钟

从前有座山,山里有座庙,庙里有个老和尚在给小和尚讲故事。

老和尚坐在禅房里,古朴的庙宇在清晨的阳光中显得庄严肃穆。小和尚们整齐地坐在地板上,期待着老和尚的故事。

老和尚眼含慈爱,开始讲述循环的故事:“很久很久以前,这座山就在这里了。它见证了无数的日出日落,风吹雨打,却依然屹立不倒。”

小和尚们聚精会神地听着,仿佛能够感受到那座山的沧桑岁月。

“于是,有人在山的脚下建了一座庙,庙里有我们一直居住的地方。这个庙,像一颗心脏,连接着山和人。”老和尚的语气宛如山风,平和而深沉。

小和尚们的眼神中闪烁着好奇,仿佛能够看见那个庙的身影。

老和尚微笑着继续说:“而我,是这个庙的守护者,也是你们的导师。我曾年轻过,也曾经历过无数的忧愁和喜悦。但山始终在,庙也一直在,就像生命中的循环一样。”

小和尚们听得入迷,他们开始意识到这个故事不仅仅是对山和庙的描述,更是一种对生命和循环的思考。

老和尚温和地看着小和尚们,继续说:“每一个日落都预示着新的一天的开始,循环着生命的轨迹。就像我们坐在一起,讲着故事,这个瞬间也在不断地循环着。”

小和尚们陷入沉思,仿佛领悟到了老和尚所言的深意。

“现在,你们明白了吗?”老和尚微笑着看着小和尚们。

小和尚们齐心协力地点了点头,仿佛在告别这个故事,他们也开始了自己的循环,去体验生命中的日出日落,感受着循环的美好。

于是,从前有座山,山里有座庙,庙里有个老和尚在给小和尚讲故事。这个故事,就这样循环着,在山的守护下,庙的温馨中,生生不息。

完整的循环

在Go语言中,循环是通过for关键字实现的,它具有四个主要的要素:

  1. 初始化语句(Initialization):

    • 初始化语句在循环开始前执行一次,用于初始化控制循环的变量。
    • 这可以是一个变量声明,或者是已经存在的变量的赋值语句。
    for i := 0; i < 5; i++ {
        // 循环体
    }
    

    在这个例子中,i := 0 是初始化语句,将变量 i 初始化为0。

  2. 条件表达式(Condition):

    • 条件表达式是一个布尔表达式,用于决定是否继续循环。
    • 当条件表达式的结果为 true 时,循环会继续执行;当结果为 false 时,循环结束。 在这个例子中,条件表达式是 i < 5
  3. 后置语句(Post statement):

    • 后置语句在每次循环迭代结束后执行,通常用于更新控制循环的变量。
    • 这可以是一个递增或递减操作,或者其他对循环控制变量的修改。 在这个例子中,i++ 是后置语句,每次循环结束后将 i 增加1。
  4. 循环体(Body):

    • 循环体是由花括号 {} 包裹的一组语句,表示每次循环迭代要执行的代码块。
    • 循环体中的代码会不断重复执行,直到条件表达式的结果为 false。 在这个例子中,fmt.Println(i) 就是循环体。

综合上述四要素,一个完整的for循环的结构如下:

for 初始化语句; 条件表达式; 后置语句 {
    // 循环体
}

这样的循环结构提供了灵活性,可以满足不同的迭代需求。同时,Go语言中也支持更简洁的循环形式,如for range循环,用于迭代数组、切片、映射等数据结构。

省略的循环

在Go语言中,for循环中的初始化语句、条件表达式、后置语句都是可选的,可以省略其中的任意一个或多个。这种灵活性提供了更简洁的写法,适用于不同的迭代场景。

  1. 初始化语句省略:

    • 如果不需要在循环开始前进行初始化操作,可以省略初始化语句。
    sum := 0
    for sum < 10 {
        sum += 1
    }
    

    在这个例子中,省略了初始化语句,循环开始前不需要额外的初始化操作,直接进入条件判断。

  2. 条件表达式省略:

    • 如果希望循环无限执行或者在循环体内使用了 break 语句来控制循环结束,可以省略条件表达式。
    sum := 0
    for {
        if sum >= 10 {
            break
        }
        sum += 1
    }
    

    在这个例子中,省略了条件表达式,通过在循环体内部使用 break 来控制循环结束。

  3. 后置语句省略:

    • 如果不需要在每次循环迭代结束后执行额外的操作,可以省略后置语句。
    sum := 0
    for sum < 10 {
        sum += 1
    }
    

    在这个例子中,省略了后置语句,循环体内部执行了 sum += 1 操作,无需在循环结束后再进行操作。

  4. 完全省略:

    • 如果所有三个要素都不需要,可以使用一个空的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)
	}
}