for 循环
2026年9月6日
Go 只有 for,没有 while / do-while。求和、遍历、定时打点,都从它变出来。
求 1+2+…+100:
sum := 0
for i := 1; i <= 100; i++ {
sum += i
}
fmt.Println(sum)
go
for 循环的五种变体
传统 for 循环
三截:初始化、条件、步进。i 只在循环里可见。
for i := 0; i < 3; i++ {
fmt.Println(i)
}
go
死循环
条件省略就是一直转。隔一秒打一次当前时间,用 time.Sleep 卡住节奏,用 break 或 return 停:
for {
fmt.Println(time.Now())
time.Sleep(time.Second)
}
go
while 模式
Go 没有 while,只留条件就等价:
n := 3
for n > 0 {
fmt.Println(n)
n--
}
go
do-while 模式
先跑一轮再判断,写成「死循环 + 末尾 break」:
n := 0
for {
fmt.Println(n)
n++
if n >= 3 {
break
}
}
go
遍历切片、map
range 用来走容器。
切片:第一个是下标,第二个是元素的拷贝:
s := []string{"a", "b", "c"}
for i, v := range s {
fmt.Println(i, v)
}
go
只要值:for _, v := range s。只要下标:for i := range s。
map:第一个是 key,第二个是 value。顺序每次不一定相同。
m := map[string]int{"age": 18, "n": 2}
for k, v := range m {
fmt.Println(k, v)
}
go
字符串 range 按 rune 走,第一个是字节下标,第二个是码点。
break,continue
break:跳出当前这层循环。continue:跳过本轮,进入下一轮。
九九乘法表:
for i := 1; i <= 9; i++ {
for j := 1; j <= i; j++ {
fmt.Printf("%d*%d=%d\t", j, i, i*j)
}
fmt.Println()
}
go
只要上三角,也可以在 j > i 时 break 内层。多层循环要一下子跳到外层,给循环加标签:
Outer:
for i := 0; i < 3; i++ {
for j := 0; j < 3; j++ {
if i+j == 3 {
break Outer
}
}
}
go