Go 언어에는 for 루프 문만 있고, 다른 언어(예: C 언어 등)에 있는 while 또는 do-while 루프가 없습니다.
for initialisation; condition; post { }
initialisation 초기화 문은 한 번만 실행되며, 그렇다면 조건이 true인지 확인합니다. }가 실행된 후 post 문이 실행됩니다. {}의 루프 문이 성공적으로 반복될 때마다 post 문이 실행된 다음 조건이 참인지 다시 확인합니다. true이면 루프 문의 실행이 계속되고, 그렇지 않으면 루프가 종료됩니다.
Go에서는 초기화, 조건, 게시가 모두 선택사항입니다. for 루프를 더 잘 이해하기 위해 예를 살펴보겠습니다.
for 루프를 사용하여 1부터 10까지의 모든 정수를 인쇄하는 프로그램을 작성합니다.
package main import ( "fmt" ) func main() { for i := 1; i <= 10; i++ { fmt.Printf(" %d",i) } }
Execute
위 코드에서 i는 1로 초기화되고 조건문은 i <= 10을 확인합니다. 조건이 true이면 i 값을 인쇄하고, 그렇지 않으면 루프를 종료합니다. post 문은 각 반복이 끝날 때마다 i를 1씩 증가시키고 i가 10보다 커지면 루프가 종료됩니다.
위 코드는 다음과 같이 인쇄됩니다. 1 2 3 4 5 6 7 8 9 10
for 루프에 선언된 변수는 루프 본문 범위 내에서만 사용할 수 있습니다. 따라서 변수 i는 for 루프 본문 외부에서 액세스할 수 없습니다.
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") }
Execution
위 코드에서는 매 반복마다 i 값을 확인합니다. i가 5보다 크면 break가 실행되고 루프가 종료되며 for 루프 이후의 print 문이 실행됩니다.
上面的程序会输出:
1 2 3 4 5 line after for loop
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 <= 10,就会执行循环,在 for 循环内部 i 每次都增加 2.
上述代码的 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。
위 내용은 Go 语言基础 - 循环语句의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!