Go语学习笔记 - 循环语句 | 从零开始Go语言

简介: Go语学习笔记 - 循环语句 | 从零开始Go语言

1、for循环

写法基本和其他语言一致,只是没有了while循环,用for代替while。


样例代码如下


// for循环
func loop1() {
  sum := 0
  for i := 0; i < 100; i++ {
  sum += i
  }
  fmt.Printf("sum = %d\n", sum)
  // 和while循环一样
  sum1 := 3
  for sum1 <= 10 {
  sum1 += sum1
  }
  fmt.Printf("sum1 = %d\n", sum1)
}

执行结果


sum = 4950

sum1 = 12


2、for-each语法

可以遍历索引和值,和Python的enumrate类似。


样例代码如下


// for-each使用
func loop2() {
  strs := []string{"小王", "小明"}
  for i, str := range strs {
  fmt.Printf("%v今天第%d次去核酸\n", str, i)
  }
  nums := [6]int{1, 2, 4, 6}
  for i, num := range nums {
  fmt.Printf("%d - %d\n", i, num)
  }
}

执行结果


小王今天第0次去核酸  

小明今天第1次去核酸  

0 - 1                

1 - 2                

2 - 4                

3 - 6                

4 - 0                

5 - 0    


3、break的使用

和其他语言一样,循环打断关键字break。


样例代码如下


// break
func loop3() {
  var a int = 0
  var b int = 30
  for b > 0 {
  if a > 4 {
    break
  }
  a++
  b -= 3
  }
  fmt.Printf("a=%d,b=%d\n", a, b)
  var c int = 0
  var d int = 30
  for i := 0; i < 10; i++ {
  c++
  for j := 0; j < 10; j++ {
    if d < 0 {
    break
    }
    d--
  }
  }
  fmt.Printf("c=%d,d=%d\n", c, d)
  c = 0
  d = 30
loop1:
  for i := 0; i < 10; i++ {
  c++
  for j := 0; j < 10; j++ {
    if d < 0 {
    break loop1
    }
    d--
  }
  }
  fmt.Printf("c=%d,d=%d\n", c, d)
}

执行结果


a=5,b=15            

c=10,d=-1            

c=4,d=-1


注意


1、和java一样,在多重嵌套循环里面,如果不对循环做标识,break只会打断最近的循环。


4、continue的使用

和break基本一致。


样例代码如下


// continue
func loop4() {
  var c int = 0
  var d int = 30
  for i := 0; i < 10; i++ {
  c++
  for j := 0; j < 10; j++ {
    d--
    if d < 0 {
    continue
    }
  }
  }
  fmt.Printf("c=%d,d=%d\n", c, d)
  c = 0
  d = 30
loop1:
  for i := 0; i < 10; i++ {
  c++
  for j := 0; j < 10; j++ {
    d--
    if d < 0 {
    continue loop1
    }
  }
  }
  fmt.Printf("c=%d,d=%d\n", c, d)
}

执行结果


c=10,d=-70          

c=10,d=-7  


5、goto的使用

goto是个有意思的关键字,可以无条件转移到某一行,有点debug的味道。


样例代码如下


//goto
func loop5() {
  m := 0
loop1:
  for m < 20 {
  fmt.Printf("loop1 -> %d\n", m)
  if m > 3 {
    break loop1
  }
  i := 0
  loop2:
  for i < 10 {
    i++
    if i == 5 {
    goto loop2
    }
    fmt.Printf("loop2 -> %d\n", i)
  }
  m++
  }
}

执行结果


loop1 -> 0          

loop2 -> 1          

loop2 -> 2          

loop2 -> 3          

loop2 -> 4          

loop2 -> 6          

loop2 -> 7

loop2 -> 8

loop2 -> 9

loop2 -> 10

loop1 -> 1

loop2 -> 1

loop2 -> 2

loop2 -> 3

loop2 -> 4

loop2 -> 6

loop2 -> 7

loop2 -> 8

loop2 -> 9

loop2 -> 10

loop1 -> 2

loop2 -> 1

loop2 -> 2

loop2 -> 3

loop2 -> 4

loop2 -> 6

loop2 -> 7

loop2 -> 8

loop2 -> 9

loop2 -> 10

loop1 -> 3

loop2 -> 1

loop2 -> 2

loop2 -> 3

loop2 -> 4

loop2 -> 6

loop2 -> 7

loop2 -> 8

loop2 -> 9

loop2 -> 10

loop1 -> 4


注意


1、自己在测试的时候还是碰到点死循环的问题,要很好理解才能使用,不然比较容易死循环。


小结

后面要开始研究函数了。



目录
打赏
0
0
0
0
9
分享
相关文章
Go语言包的组织与导入 -《Go语言实战指南》
本章详细介绍了Go语言中的包(Package)概念及其使用方法。包是实现代码模块化、复用性和可维护性的核心单位,内容涵盖包的基本定义、命名规则、组织结构以及导入方式。通过示例说明了如何创建和调用包,并深入讲解了`go.mod`文件对包路径的管理。此外,还提供了多种导入技巧,如别名导入、匿名导入等,帮助开发者优化代码结构与可读性。最后以表格形式总结了关键点,便于快速回顾和应用。
127 61
Go语言之接口与多态 -《Go语言实战指南》
Go 语言中的接口是实现多态的核心机制,通过一组方法签名定义行为。任何类型只要实现接口的所有方法即视为实现该接口,无需显式声明。本文从接口定义、使用、底层机制、组合、动态行为到工厂模式全面解析其特性与应用,帮助理解 Go 的面向接口编程思想及注意事项(如 `nil` 陷阱)。
Go语言测试简明指南:深度解读go test命令
总的来说,go test是 Go 语言中一个强而有力的工具,每个 Go 程序员都应该掌握并把它融入到日常的开发和调试过程中。就像是一个眼镜过滤出的太阳,让我们在宽阔的代码海洋中游泳,而不是淹没。用好它,让我们的代码更健壮,让我们的生产力更强效。
106 23
Go语言网络编程:使用 net/http 构建 RESTful API
本章介绍如何使用 Go 语言的 `net/http` 标准库构建 RESTful API。内容涵盖 RESTful API 的基本概念及规范,包括 GET、POST、PUT 和 DELETE 方法的实现。通过定义用户数据结构和模拟数据库,逐步实现获取用户列表、创建用户、更新用户、删除用户的 HTTP 路由处理函数。同时提供辅助函数用于路径参数解析,并展示如何设置路由器启动服务。最后通过 curl 或 Postman 测试接口功能。章节总结了路由分发、JSON 编解码、方法区分、并发安全管理和路径参数解析等关键点,为更复杂需求推荐第三方框架如 Gin、Echo 和 Chi。
|
2月前
|
Go语言方法与接收者 -《Go语言实战指南》
本文介绍了 Go 语言中方法的相关概念和用法。方法是绑定到特定类型上的函数,包含值接收者和指针接收者两种形式。值接收者不会改变原始数据,而指针接收者可修改原始数据,且在处理大型结构体时性能更优。文章详细对比了方法与普通函数的区别,并说明了选择指针接收者的原因,如修改原始值、提升性能及保持一致性。此外,Go 支持为任意自定义类型定义方法,不仅限于结构体。最后通过表格总结了方法的核心概念和使用场景。
Go语言常见接口设计技巧-《Go语言实战指南》
本文分享了 Go 语言中接口设计的最佳实践与技巧。首先介绍了接口设计原则,包括面向接口编程和接口隔离原则(定义最小化接口)。接着详细讲解了常用技巧:关注行为而非数据、优先返回接口隐藏实现细节、遵循“-er”命名惯例、使用接口组合提升灵活性、通过 Mock 接口简化单元测试,以及避免导出仅内部使用的接口。最后以表格形式总结了各技巧的核心要点,帮助开发者编写更清晰、可维护的代码。
|
2月前
|
Go
Go语言之匿名字段与组合 -《Go语言实战指南》
Go 语言通过匿名字段(embedding)实现类似继承的组合机制。匿名字段是在结构体中嵌套类型而不显式命名字段名,自动获取嵌入类型的字段和方法访问权限。支持方法提升、指针嵌入、字段冲突处理及多重组合,强调“组合优于继承”的设计理念,助力灵活高效的代码组织方式。
初探Go语言RPC编程手法
总的来说,Go语言的RPC编程是一种强大的工具,让分布式计算变得简单如同本地计算。如果你还没有试过,不妨挑战一下这个新的编程领域,你可能会发现新的世界。
59 10
Go语言依赖管理与版本控制-《Go语言实战指南》
本章深入探讨Go语言中的依赖管理与版本控制,重点介绍Go Modules的使用方法。内容涵盖依赖管理的重要性、语义化版本控制(SemVer)、查看和管理依赖版本、主版本路径规则、常见操作场景、国内代理加速、依赖安全(go.sum文件)、版本冲突解决及版本锁定与回退等主题。通过学习,读者将掌握如何实现清晰、稳定且可重复构建的项目依赖管理。
Go语言JSON 序列化与反序列化 -《Go语言实战指南》
本文介绍了 Go 语言中使用 `encoding/json` 包实现 JSON 与数据结构之间的转换。内容涵盖序列化(`Marshal`)和反序列化(`Unmarshal`),包括基本示例、结构体字段标签的使用、控制字段行为的标签(如 `omitempty` 和 `-`)、处理 `map` 和切片、嵌套结构体序列化、反序列化未知结构(使用 `map[string]interface{}`)以及 JSON 数组的解析。最后通过表格总结了序列化与反序列化的方法及类型要求,帮助开发者快速掌握 JSON 数据处理技巧。
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问