package main
import "fmt"
func main () {
//标准方式一
for i:=0; i < 2; i++ {
fmt.Printf("i:%v\n", i)
}
fmt.Printf("\n")
//方式二
i:=0
for i < 3 {
fmt.Printf("i:%v\n", i)
i++
}
fmt.Printf("\n")
//无限循环 实现where ture
// for {
// fmt.Println("Hello, playground:")
// }
// for turn {
// fmt.Println("Hello, playground:")
// }
/*循环控制-break、continue、goto
1.break是用来结束整个循环语句
2.continue是用来结束此次循环居于
*/
//当i=3时,结束for循环
for i := 1; i <= 5; i++ {
if i == 3 {
break
}
fmt.Printf("i:%v\n", i)
}
fmt.Printf("\n")
//当i=3时,结束此次循环,开始下一次循环
for i := 1; i <= 4; i++ {
if i == 3 {
continue
}
fmt.Printf("i:%v\n", i)
}
/*
1.多重循环时,内部循环控制跳出外部循环,可以使用break 加上外部循环的标签块
2.除了break、continue外,goto关键字也可以跳出循环
*/
fmt.Println("---break跳出外部循环---")
OutLoop1:
for i := 1; i <= 3; i++ {
for j := 1; j <= 3; j++ {
if j == 3 {
break OutLoop1
}
fmt.Println([]int{i, j})
}
}
fmt.Println("---continue跳出外部循环---")
OutLoop2:
for i := 1; i <= 3; i++ {
for j := 1; j <= 4; j++ {
if j == 3 {
continue OutLoop2
}
fmt.Println([]int{i, j})
}
}
/*
1.go语言的 goto 语句可以无条件地转移到过程中指定的行。
2.goto 语句通常与条件语句配合使用,可用来实现条件转移, 构成循环,跳出循环体等功能。
3.在结构化程序设计中一般不主张使用 goto 语句, 以免造成程序流程的混乱,使理解和调试程序都产生困难。
*/
//案例一
var a int = 10
LOOP:
for a < 20 {
if a == 15 {
/* 跳过迭代 */
a = a + 1
goto LOOP
}
fmt.Printf("a的值为 : %d\n", a)
a++
}
//案例二
n := 30
fmt.Println(1)
fmt.Println(2)
if n > 20 {
goto label1 //转移到指定的label1行
}
fmt.Println(3)
fmt.Println(4)
fmt.Println(5)
label1:
fmt.Println(6)
fmt.Println(7)
/* for...range...
for range每次获取一对值,下标和数值。for只能通过下标获取元素。
for range可以遍历切片、数组、字符串、Map、Channel
建议不需要后去下标时舍弃下标,提高性能
*/
// 1. 数组的循环
strs := []string{"Hello", "World", "I", "Love", "You!"}
for i, str := range strs {
fmt.Println("Hello, Strs:", i, str)
}
// 2. map的循环
strMap := map[string]string {
"a":"Hello",
"b":"The",
"c":"World",
}
fmt.Println(strMap)
/*
需要注意的是:
如for index, value := range arrayTest {...}遍历数组时。在for循环中直接对value进行修改或者赋值,实际数组中的元素不会发生改变。
原因是for range获取的value是将对象中的元素copy了一份。
所以如果实际需要修改元素时,可以使用下标找到对应元素,再进行修改。
*/
for index, value := range strMap {
fmt.Println(index,value)
//fmt.Println(strMap[index])
strMap["c"] = "周杰伦" //引用类型,改变根据下表修改值,会影响原来数组
}
fmt.Println(strMap)
}