for循环
for
循环具有三个可选的组成部分:初始化语句(在循环开始前执行一次)、条件表达式(在每次循环开始前评估)、后处理语句(在每次循环体执行完毕后执行)。Go语言中的循环语句只支持for关键字,而不支持while和do-while结构。
for 初始化语句; 条件表达式; 后处理语句 {
// 循环体
}
- 初始化语句:在循环开始前执行,通常用于初始化一个或多个计数器变量。
- 条件表达式:在每次循环开始前评估。如果条件为真(true),则执行循环体;如果为假(false),则终止循环。
- 后处理语句:在每次循环体执行完毕后执行,通常用于更新计数器变量。
示例:
for i := 0; i <= 10; i++ {
fmt.Println(i)
}
for循环其他格式
i := 0
for i<=10; {
fmt.Println(i)
i++
}
i := 0for {
if i<=10{
fmt.Println(i)
} else {
break
}
i++
}
如果不加break会输出0--10之后继续循环,但是不会再打印,因为是无限循环,go语言中没有缩进要求,只要在括号里就可以
for...range循环
for...range
循环用于遍历数组、切片、字符串、映射(map)或通道(channel)的元素。它会自动处理索引和值(对于映射,则是键和值)。
for 索引, 值 := range 集合 {
// 循环体
}
- 索引:对于数组、切片、字符串,是元素的索引;对于映射,是键。
- 值:集合中对应索引或键的
示例:
- 遍历切片:
slice := []int{1, 2, 3, 4, 5}
for index, value := range slice {
fmt.Printf("Index: %d, Value: %d\n", index, value)
}
- 遍历字符串:
原本的方式遍历
var str string = "I like 黑神话悟空"
str2 :=[]rune(str)
for i :=0; i<len(str2); i++{
fmt.Printf("%c \n", str2[i])
}
var str string = "I like 黑神话悟空"for index,value := range str{
fmt.Printf("index=%d, value=%c \n",index,value)
}
忽略索引:
var str string = "I like 黑神话悟空"
for _,value := range str {
fmt.Printf("value=%c \n", value)
}
- 遍历映射:
m := map[string]int{"a": 1, "b": 2, "c": 3}
for key, value := range m {
fmt.Printf("Key: %s, Value: %d\n", key, value)
}
无限循环
如果省略了for
循环的初始化语句、条件表达式和后处理语句,它将成为一个无限循环,直到你显式地通过break
语句退出循环或使用return
语句从包含它的函数返回。
for {
// 循环体
// 可以通过break语句退出循环
}
示例:
for {
fmt.Println("这是一个无限循环,需要手动停止!")
// 假设这里有一些条件判断,满足条件时退出循环
// break
}
案例
算出来1-88能被9整除的数量和累计和
package main
import "fmt"
func main() {
var a int = 88
var count int = 0
var sum int = 0
for i:=1; i<=a; i++ {
if i%9 == 0 {
count++
sum += i
}
}
fmt.Println(count,sum)
}