循环

Go 语言中的循环

for

Go 的 for 循环类似于 C,但却不尽相同。它统一了 for 和 while,不再有 do-while 了。它有三种形式,但只有一种需要分号。

// 如同C的for循环
for init; condition; post { }

// 如同C的while循环
for condition { }

// 如同C的for(;;)循环
for { }

Go 没有逗号操作符,而 ++ 和 – 为语句而非表达式。因此,若你想要在 for 中使用多个变量,应采用平行赋值的方式(因为它会拒绝 ++ 和 –).

// 反转 a
for i, j := 0, len(a)-1; i < j; i, j = i+1, j-1 {
	a[i], a[j] = a[j], a[i]
}

range

若你想遍历数组、切片、字符串或者映射,或从信道中读取消息,range 子句能够帮你轻松实现循环。

for key, value := range oldMap {
	newMap[key] = value
}

若你只需要该遍历中的第一个项(键或下标),去掉第二个就行了:

for key := range m {
	if key.expired() {
		delete(m, key)
	}
}

若你只需要该遍历中的第二个项(值),请使用空白标识符,即下划线来丢弃第一个值:

sum := 0
for _, value := range array {
	sum += value
}

空白标识符可被赋予或声明为任何类型的任何值,而其值会被无害地丢弃。它有点像 Unix 中的 /dev/null 文件:它表示只写的值,在需要变量但不需要实际值的地方用作占位符。

上一页