Go语言--语法基础5--基本数据类型--循环语句
Go 语言循环语句 for 循环
golang 里面没有 while 关键字,可以用 for+break 实现。
for 循环是一个循环控制结构,可以执行指定次数的循环。
语法
Go 语言的 For 循环有 3 种形式,只有其中的一种使用分号。
和 C 语言的 for 一样: for 循环 注意:不能在 for 之后带() 会有语 法错误。
for init; condition; post {
//循环体语句
}
• init : 一般为赋值表达式,给控制变量赋初值;
• condition : 关系表达式或逻辑表达式,循环控制条件;
• post : 一般为赋值表达式,给控制变量增量或减量。

和 C 的 while 一样: while循环
for condition { //循环体语句
}
和 C 的 for(;;) 一样: 死循环
for { //循环体语句
}
for 语句执行过程如下:
◇ ①先对表达式 1 赋初值;
◇ ②判别赋值表达式 condition 是否满足给定条件,若其值为真,执
行循环体内语句,
然后执行 post ,进入第二次循环,再判别 condition ;否则判断
condition 的值为假,
不满足条件,就终止 for 循环,执行循环体外语句。
实例
package main
import "fmt"
func main() {var b int = 15var a int/* for 循环 */for a := 0; a < 10; a++ {fmt.Printf("a 的值为: %d\n", a)}for a < b {a++fmt.Printf("a2 的值为: %d\n", a)}
}
尝试一下以上实例运行输出结果为 :
Go 语言循环嵌套
Go 语言允许用户在循环内使用循环。接下来我们将为大家介绍嵌套循
环的使用。
Go 语言中的循环语句只支持 for 关键字,而不支持 while 和 do-while
结构,
关键字 for 的基本使用方法与 C 语言和 C++ 中非常接近:
语法
以下为 Go 语言嵌套循环的格式:
for [condition | ( init; condition; increment ) | Range]{for [condition | ( init; condition; increment ) | Range]{statement(s)}statement(s)
}
注意: for 后面的条件表达式不需要用圆括号 () 括起来
实例
以下实例使用循环嵌套来输出 2 到 100 间的素数:
package main
import "fmt"
func main() {var i, j intfor i=2; i < 100; i++ { //左花括号{必须与 for 处于同一行for j=2; j <= (i/j); j++ {if(i%j==0) {break // 想·如果发现因子,则不是素数}}if(j > (i/j)) {fmt.Printf("%d 是素数\n", i)}}
}
以上实例运行输出结果为:
2 是素数
3 是素数
5 是素数
7 是素数
。。。。
73 是素数
79 是素数
83 是素数
89 是素数
97 是素数
Go 语言中 range 关键字
用于 for 循环中迭代数组 (array) 、切片 (slice) 、通道 (channel) 或
集合 (map) 的元素。在数组和切片中它返回元素的索引值,在集合中返回
key-value 对的 key 值。
对于映射,它返回下一个键值对的键。 Range 返回一个值或两个值。如果在
Range 表达式的左侧
只使用了一个值,则该值是下表中的第一个值。
实例
package main
import "fmt"
func main() {//这是我们使用range去求一个slice的和。使用数组跟这个很类似nums := []int{2, 3, 4}sum := 0for _, num := range nums {sum += num}fmt.Println("sum:", sum)//在数组上使用range将传入index和值两个变量。上面那个例子我们不需
要使用该元素的序号,//所以我们使用空白符"_"省略了。有时侯我们确实需要知道它的索引。for i, num := range nums {if num == 3 {fmt.Println("index:", i)}}//range也可以用在map的键值对上。kvs := map[string]string{"a": "apple", "b": "banana"}for k, v := range kvs {fmt.Printf("%s -> %s\n", k, v)}//range也可以用来枚举Unicode字符串。第一个参数是字符的索引,
5/6//第二个是字符(Unicode的值)本身。for i, c := range "go" {fmt.Println(i, c)}
}
以上实例运行输出结果为:
sum: 9
index: 1
a -> apple
b -> banana
0 103
1 111