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 卡住节奏,用 breakreturn 停:

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 > ibreak 内层。多层循环要一下子跳到外层,给循环加标签:

Outer:
	for i := 0; i < 3; i++ {
		for j := 0; j < 3; j++ {
			if i+j == 3 {
				break Outer
			}
		}
	}
go

参考文档