package main import"fmt" funcmain(){ //实现一个功能:求和: 1+2+3+4+5: //定义变量: var i1 int = 1 var i2 int = 2 var i3 int = 3 var i4 int = 4 var i5 int = 5 //求和: //定义一个变量,用来接收这个和 var sum int = 0 sum += i1 sum += i2 sum += i3 sum += i4 sum += i5 //输出结果: fmt.Println(sum) }
package main import"fmt" funcmain(){ //实现一个功能:求和: 1+2+3+4+5: //定义变量: var i int = 1 //求和: //定义一个变量,用来接收这个和 var sum int = 0 sum += i i++ sum += i i++ sum += i i++ sum += i i++ sum += i i++ //输出结果: fmt.Println(sum) }
package main import"fmt" funcmain(){ //实现一个功能:求和: 1+2+3+4+5: //求和: //利用for循环来解决问题: var sum int = 0 for i := 1 ; i <= 5 ; i++ { sum += i } //输出结果: fmt.Println(sum) // for循环的语法格式: // for 初始表达式; 布尔表达式(条件判断); 迭代因子 { // 循环体;--》反复重复执行的内容 // } // 注意:for的初始表达式 不能用var定义变量的形式,要用:= // 注意:for循环实际就是让程序员写代码的效率高了,但是底层该怎么执行还是怎么执行的,底层效率没有提高,只是程序员写代码简洁了而已 }
for循环原理:
1.4.3.2 细节
【1】格式灵活:
1 2 3 4 5 6 7 8 9
package main import"fmt" funcmain(){ i := 1//变量的初始化 for i<=5 {//条件表达式。判断条件 fmt.Println("你好 Golang")//循环体 i++//迭代 } }
【2】死循环:
1 2 3 4 5 6 7 8 9 10 11
package main import"fmt" funcmain(){ //死循环: // for { // fmt.Println("你好 Golang") // } for ;; { fmt.Println("你好 Golang") } }
在控制台中结束死循环:ctrl+c
1.4.3.3 for range
(键值循环) for range结构是Go语言特有的一种的迭代结构,在许多情况下都非常有用,for range 可以遍历数组、切片、字符串、map 及通道,for range 语法上类似于其它语言中的 foreach 语句,一般形式为: for key, val := range coll { … }
代码展示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
package main import"fmt" funcmain(){ //定义一个字符串: var str string = "hello golang你好" //方式1:普通for循环:按照字节进行遍历输出的 (暂时先不使用中文) // for i := 0;i < len(str);i++ {//i:理解为字符串的下标 // fmt.Printf("%c \n",str[i]) // } //方式2:for range for i , value := range str { fmt.Printf("索引为:%d,具体的值为:%c \n",i,value) } //对str进行遍历,遍历的每个结果的索引值被i接收,每个结果的具体数值被value接收 //遍历对字符进行遍历的 }
for-range的结果:
1.4.3.4 关键字
1.4.3.4.1 break
【1】感受break在循环中的作用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
package main import"fmt" funcmain(){ //功能:求1-100的和,当和第一次超过300的时候,停止程序 var sum int = 0 for i := 1 ; i <= 100 ; i++ { sum += i fmt.Println(sum) if sum >= 300 { //停止正在执行的这个循环: break } } fmt.Println("-----ok") }
package main import"fmt" funcmain(){ //双重循环: for i := 1; i <= 5; i++ { for j := 2; j <= 4; j++ { fmt.Printf("i: %v, j: %v \n",i,j) if i == 2 && j == 2 { break } } } }
总结:break的作用结束离它最近的循环
结果:
【3】标签的使用展示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
package main import"fmt" funcmain(){ //双重循环: label2: for i := 1; i <= 5; i++ { for j := 2; j <= 4; j++ { fmt.Printf("i: %v, j: %v \n",i,j) if i == 2 && j == 2 { break label2 //结束指定标签对应的循环 } } } fmt.Println("-----ok") }
注意:如果那个标签没有使用到 的话,那么标签不用加,否则报错:定义未使用
结果:
1.4.3.4.2 continue
【1】continue的作用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
package main import"fmt" funcmain(){ //功能:输出1-100中被6整除的数: //方式1: // for i := 1; i <= 100; i++ { // if i % 6 == 0 { // fmt.Println(i) // } // } //方式2: for i := 1; i <= 100; i++ { if i % 6 != 0 { continue//结束本次循环,继续下一次循环 } fmt.Println(i) } }
【2】深入理解:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
package main import"fmt" funcmain(){ //双重循环: for i := 1; i <= 5; i++ { for j := 2; j <= 4; j++ { if i == 2 && j == 2 { continue } fmt.Printf("i: %v, j: %v \n",i,j) } } fmt.Println("-----ok") }
结果:
结论:continue的作用是结束离它近的那个循环,继续离它近的那个循环
【3】标签的作用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
package main import"fmt" funcmain(){ //双重循环: label: for i := 1; i <= 5; i++ { for j := 2; j <= 4; j++ { if i == 2 && j == 2 { continue label } fmt.Printf("i: %v, j: %v \n",i,j) } } fmt.Println("-----ok") }