博主 libin9iOak带您 Go to Golang Language.✨
个人主页——libin9iOak的博客
《面试题大全》 文章图文并茂生动形象简单易学!欢迎大家来踩踩~
《IDEA开发秘籍》学会IDEA常用操作,工作效率翻倍~
希望本文能够给您带来一定的帮助文章粗浅,敬请批评指正!
本篇博客介绍了 Go 语言程序中的循环语句,包括 for 循环、循环变体和多层 for 循环。同时讨论了跳出循环的语句,包括 break 和 continue,以及介绍了 goto 语句的使用。通过学习本篇内容,可以加深对 Go 语言循环语句的理解和应用。
在编程中,循环语句是一种重要的控制结构,它允许我们重复执行一段代码块,直到满足特定条件为止。Go 语言提供了灵活且功能丰富的循环语句,可以帮助我们实现各种重复操作和迭代逻辑。本篇博客将深入讨论 Go 语言的循环语句,帮助您掌握循环的使用技巧和注意事项。
程序的流程控制结构一共有三种:顺序结构,选择结构,循环结构。
顺序结构:代码从上向下逐行的执行
选择结构:条件满足,某些代码才会被执行。0-1次
if语句,switch语句
循环结构:条件满足,某些代码会被反复的多次执行。0-n次
for语句
循环语句表示条件满足,可以反复的执行某段代码。
在 Go 语言中,有三种主要的循环语句:
for
循环:for
循环用于重复执行一个代码块,可以根据条件进行控制。Go 语言提供了多种 for
循环的形式,包括:
for
初始化语句; 条件语句; 后续语句 { 代码块 }:经典的 for
循环形式。for
条件语句 { 代码块 }:类似于其他语言的 while
循环,只有条件语句,没有初始化和后续语句。for { 代码块 }
:类似于其他语言的无限循环,没有条件语句,会一直执行代码块,直到遇到 break
或 return
才会退出循环。while
循环:Go 语言没有专门的 while
关键字,但可以使用 for
循环来模拟 while
循环,只需要省略初始化语句和后续语句即可,例如:
for 条件语句 {
// 代码块
}
range
循环:range
循环用于遍历数组、切片、字符串、映射等可迭代对象的元素。它返回每个元素的索引和值。例如:
for 索引, 值 := range 可迭代对象 {
// 代码块
}
注意:如果只关心值而不需要索引,可以使用下划线 _
来忽略索引变量。
这些循环语句可以根据不同的需求选择合适的形式来使用。
今天主要介绍for循环, range 后面章节再学习!
语法结构:
for init; condition; post { }
初始化语句只执行一次。在初始化循环之后,将检查该条件。如果条件计算为true,那么{}中的循环体将被执行,然后是post语句。post语句将在循环的每次成功迭代之后执行。在执行post语句之后,该条件将被重新检查。如果它是正确的,循环将继续执行,否则循环终止。
示例代码:
package main
import "fmt"
/*
for循环:某些代码会被多次的执行
语法:
for 表达式1;表达式2;表达式3{
循环体
}
*/
func main() {
// 快捷键fori
for i := 0; i < 6; i++ {
fmt.Println("Hello Go ! wx: libin9iOak ")
fmt.Printf(" %d ", i)
}
}
在for循环中声明的变量仅在循环范围内可用。因此,i不能在外部访问循环。
所有的三个组成部分,即初始化、条件和post都是可选的。
for condition { }
效果与while相似
for { }
效果与for(; 一样
代码案例:
package main
import "fmt"
func main() {
/*
1. 标准写法:
for 表达式1;表达式2;表达式3{
循环体
}
2.同时省略表达式1和表达式3
for 表达式2{
}
相当于while(条件)
3.同时省略3个表达式
for{
}
相当于while(true)
注意点:当for循环中,省略了表达式2,就相当于直接作用在了true上
4.其他的写法:for循环中同时省略几个表达式都可以。。
省略表达式1:
省略表达式2:循环永远成立-->死循环
省略表达式3:
*/
i := 1
for i <= 5 {
fmt.Println(i)
i++
}
fmt.Println("-->",i)
fmt.Println("------------")
for{
fmt.Println("i--->",i)
i++
}
}
for 循环的 range 格式可以对 slice、map、数组、字符串等进行迭代循环
for key, value := range oldMap {
newMap[key] = value
}
package main
import "fmt"
func main() {
var b int = 15
var a int
numbers := [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 的值为: 0
a 的值为: 1
a 的值为: 2
a 的值为: 3
a 的值为: 4
a 的值为: 5
a 的值为: 6
a 的值为: 7
a 的值为: 8
a 的值为: 9
a 的值为: 1
a 的值为: 2
a 的值为: 3
a 的值为: 4
a 的值为: 5
a 的值为: 6
a 的值为: 7
a 的值为: 8
a 的值为: 9
a 的值为: 10
a 的值为: 11
a 的值为: 12
a 的值为: 13
a 的值为: 14
a 的值为: 15
第 0 位 x 的值 = 1
第 1 位 x 的值 = 2
第 2 位 x 的值 = 3
第 3 位 x 的值 = 5
第 4 位 x 的值 = 0
第 5 位 x 的值 = 0
for循环中又有循环嵌套,就表示多层循环了。
package main
import "fmt"
func main() {
for i := 1; i <= 3; i++ {
for j := 1; j <= 3; j++ {
fmt.Printf("i: %d, j: %d\n", i, j)
}
}
}
break:跳出循环体。break语句用于在结束其正常执行之前突然终止for循环
示例代码:
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")
}
continue:跳出一次循环。continue语句用于跳过for循环的当前迭代。在continue语句后面的for循环中的所有代码将不会在当前迭代中执行。循环将继续到下一个迭代。
示例代码:
package main
import (
"fmt"
)
func main() {
for i := 1; i <= 10; i++ {
if i%2 == 0 {
continue
}
fmt.Printf("%d ", i)
}
}
goto:可以无条件地转移到过程中指定的行。
语法结构:
goto label;
..
..
label: statement;
package main
import "fmt"
func main() {
/* 定义局部变量 */
var a int = 10
/* 循环 */
LOOP: for a < 20 {
if a == 15 {
/* 跳过迭代 */
a = a + 1
goto LOOP
}
fmt.Printf("a的值为 : %d\n", a)
a++
}
}
下面是一个简单的 Go 语言代码示例,展示了如何使用 goto
语句:
package main
import "fmt"
func main() {
i := 0
loop:
if i < 5 {
fmt.Println(i)
i++
goto loop
}
fmt.Println("Loop finished")
}
在上述示例中,我们使用 goto
语句实现了一个简单的循环。初始时,我们将 i
的值设置为 0。然后,我们使用 loop
标签标记了一个代码块的位置。
在 if
语句中,我们检查 i
的值是否小于 5。如果满足条件,就打印 i
的值,然后将 i
递增,并使用 goto
语句跳转到 loop
标签所在的代码块。
这样,每次循环迭代时,会打印当前的 i
值,然后通过 goto
跳转回 loop
标签,继续下一次迭代,直到 i
的值不再小于 5。
最终,当 i
的值达到 5 时,不满足 if
语句的条件,循环结束,程序会打印出 “Loop finished”。
需要注意的是,尽管 goto
语句可以用于控制流,但在实际开发中,应尽量避免使用它,以免导致代码难以理解和维护。通常,结构化的控制流语句(如 for
、if
、switch
等)更易于理解和维护。
统一错误处理
多处错误处理存在代码重复时是非常棘手的,例如:
err := firstCheckError()
if err != nil {
goto onExit
}
err = secondCheckError()
if err != nil {
goto onExit
}
fmt.Println("done")
return
onExit:
fmt.Println(err)
exitProcess()
除了基本的 for 循环和循环控制语句,Go 语言还提供了其他强大的控制结构和语法特性。例如,range 关键字可以用于迭代数组、切片、字符串、映射等数据结构。此外,通过使用标签和 goto 语句,我们可以在需要的时候灵活地控制程序的流程。在今后的学习过程中,您还将了解更多关于 Go 语言的高级特性和技术。
通过本篇博客,我们深入学习了 Go 语言中的循环语句。我们了解了 for 循环的基本语法和用法,并学习了循环的变体和多层循环的实现。同时,我们还探讨了跳出循环的语句,包括 break 和 continue,以及介绍了 goto 语句的使用。这些内容为我们理解和掌握 Go 语言中的循环提供了坚实的基础。在今后的学习和实践中,我们将能够更好地运用循环语句来解决实际问题,并进一步提升我们的编程能力。
通过今天的学习,您已经踏上了Golang的学习之旅。在未来的日子里,您将探索Golang的各个方面,从基础概念到高级技巧,从实际应用到性能优化。
学习一门编程语言是一个持续的过程,每一天都是您向Golang的精通迈进的重要一步。我鼓励您坚持每天学习,保持热情和好奇心,解决挑战并享受成功的喜悦。
在您的学习旅程中,不要忘记参与社区和与其他Golang开发者交流。分享您的见解和经验,向他人学习,并在开源项目或实际应用中展示您的技能。
如果您在学习过程中遇到困难或有任何问题,不要犹豫向社区和专家寻求帮助。持续学习,勇敢探索,您将在Golang领域取得令人瞩目的成就。
最后,感谢您的阅读和支持!祝愿您在未来的每一天中都能够成为一名精通Golang的开发者!
期待听到您在学习过程中的进展和成就。如果您需要进一步的帮助,请随时告诉我。祝您在学习Golang的旅程中取得巨大成功!
如果您在学习过程中有任何疑惑,请点击下方名片,带您一对一快速入门 Go语言 的世界 ~