一、基于计数器的迭代
格式
for 初始化语句; 条件语句; 修饰语句{}实例
package main import "fmt" func main(){ for i:=0;i<10;i++{ fmt.Print(i) } fmt.Println() /* 执行步骤: 1、 初始化,条件判断,条件成立执行循环体,不成立结束for循环 2、条件成立执行循环体,i++,条件判断 3、条件成立执行循环体,i++,条件判断 4、... 5、条件不成立结束循环体 */ // 求 100 以内偶数之和 var sum int = 0 for i:=0;i <= 100;i++{ if i%2 == 0{ // 取余为0 则为偶 sum += i } } fmt.Println(sum) // 99乘法表 for i:=1;i<10;i++{ for j:=1 ;j<=i;j++{ fmt.Printf("%d * %d = %d ",j,i,j*i) } fmt.Println("") } }0123456789
二、基于条件判断的迭代格式
for 条件语句{}实例
package main import "fmt" func main(){ // 求 100以内 奇数之和 var sum,i int // 多相同类型变量声明 i = 0 for i<=100{ if i % 2 != 0{ sum += i } i++ } fmt.Println(sum) // 也可以这样 var sum1,j int j = 0 for true{ // 条件永远为 true if j % 2 != 0{ sum1 += j } j++ if j > 100{ break // 中断当前循环,或跳出当前循环体 } } fmt.Println(sum1) } 三、无限循环格式
for{} // 与 for true {},行为是一样的 //实例
package main import "fmt" func main(){ // 输入内容并打印在终端 var content string for { fmt.Print("请输入内容:") fmt.Scanf("%s\n",&content) // &content 是content的内存地址 fmt.Println("你输入的内容是:",content) } } 四、for-range语法格式
这是 Go 特有的一种的迭代结构,您会发现它在许多情况下都非常有用。它可以迭代任何一个集合(包括数组和 map,详见第 7 和 8 章)。语法上很类似其它语言中 foreach 语句,但您依旧可以获得每次迭代所对应的索引
实例
package main import ( "fmt" ) func main(){ str := "jmz is good man" for index,v := range str{ // v 是 rune 类型,所以需要转化成string 类型 fmt.Println(index , " - " , string(v)) } str1:= "from 中国" for _,v := range str1{ // _ 省略 第一个返回参数 fmt.Println(v, " - ", string(v)) } // 关于rune类型 一个字符串是unicode编码的字符。 // 下面的结果处理与上面的一样 value := []rune(str1) // 切片类型 ,将str1 转成切片类型 i := 0 for i<len(value){ fmt.Println(string(value[i])) i++ } }统计字符中相同字符的个数
package main import "fmt" func main(){ str := "上海自来水来自海上,are you know?hahahah" count := make(map[string]int) // map 类型(引用类型) /* // count := make(map[string]int) 相当于: var count map[string]int count = make(map[string]int) // 后面会着重讲解 */ for _,v := range str{ count[string(v)] += 1 // 将rune 转化成string : string(v) } for k,v := range count{ // map 类型也可以for-range fmt.Println(k," - ",v) } } 五、Break 与 continue解释
break: 跳出当前循环体(结束循环体) continue: 跳过本次循环,进入下一次循环实例
package main import "fmt" func main(){ for i:= 0;i<10;i++{ if i == 3{ continue } if i == 6{ break } fmt.Println(i) } } 输出结果: 0 1 2 4 5 猜猜结果猜猜一
for i:=0;i<10;i++{ var j int fmt.Println(j) j = 5 }10个0,j 是局部变量,每次循环都会重新声明,初始值,所以每次都是0
猜猜二
for i:=0;;i++{ fmt.Println(i) }无限循环,一直累加
猜猜三
for i:=0;i<10;{ fmt.Println(i) }无限循环,都是0,没有累加
猜猜四
for i,j:=2,10;i<j;{ fmt.Println(i," - ",j) i *= 2 j ++ }