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