分支结构
当情况不同对应的操作不同时,需要使用到分支循环
if else
格式:
if 表达式1 {
操作1
} else {
操作2
}
操作3
--------------------------------------------------------------------------------------
若表达式1为true,则只执行操作1,然后继续执行操作3
若表达式1为false,则只执行操作2,然后继续执行操作3
或者
if 表达式1 {
操作1
} else if 表达式2 {
操作2
} else if 表达式3 {
操作3
} …… else if 表达式n {
操作n
} else {
操作n+1
}
操作n+2
表达式1~n中,哪个成立则只执行对应的操作,然后执行操作n+2
若表达式1~n都不成立,则执行else中的内容(操作n+1),然后继续执行操作n+2
注意: 与 if 匹配的 { 必须和 if 表达式 放在同一行
与else匹配的{必须与else写在同一行,与上一个if或else if匹配的右边的大括号也必须和else写在同一行。
switch case
可以用来对变量的值进行不同操作
格式:
switch 变量名 {
case 值1 :
操作1
case 值2 :
操作2
case 值3 :
操作3
……
……
case 值n :
操作n
default:
操作n+1
}
若满足值1~n中的一个,则执行操作n
若值1~n都不满足,则执行default后的内容,即操作n+1
只能执行一个 操作,执行完此操作后直接跳出switch
如果需要再执行完当前操作时,还需要执行switch中下一个操作 则需要在当前操作的最后一行加上fallthrough
若多个值对应的操作一样
switch 变量名 {
case 值1 ,值2 ,值3:
操作1
case 值4,值5,值6:
操作2
default:
操作3
}
执行基本如上
值的位置也可以是表达式 例如:
var num = 0
fmt.Scanf("%d", &num)
fmt.Println(num)
switch {
case num%2 == 0:
fmt.Println("偶数")
case num%2 != 0:
fmt.Println("奇数")
}
循环结构
go里只有for循环
for
格式
for 初始条件1;循环继续条件2;结束语句3 {
循环体语句4
}
执行流程:
开始执行一次 1 ,之后判断2是否成立,若2为false则跳出for循环
若2为true则执行4,然后执行3。到这里,第一次循环结束。然后判断2……之后如上
其他格式1
初始条件1
for ;循环继续条件2;结束语句3 {
循环体语句4
}
其他格式2
初始条件1
for 循环继续条件2 {
循环体语句4
结束语句3
}
其他格式3 无限循环
for {
循环体语句4
}
for range(键值循环)
格式:
var str string = "abc"
for i,v := range str {
}
i表示索引,任意标识符都可,不一定是i
v表示索引对应的值,任意标识符都可,不一定是v
例如
package main
import "fmt"
func main() {
var name = "12356"
for i, v := range name {
fmt.Printf("%d(%c)\n", i, v)
}
}
输出
0(1)
1(2)
2(3)
3(5)
4(6)
break
跳出全部循环
package main
import "fmt"
func main() {
for i := 1; i <= 10; i++ {
if i == 5 {
break
}
fmt.Printf("%d ", i)
}
}
fmt.Printf("%d ", 1000)
当i等于5时,执行break,然后执行fmt.Printf("%d ", 1000)操作
输出
1 2 3 4 1000
continue
跳出当前循环,并没有跳出全部循环,继续执行下一次循环
package main
import "fmt"
func main() {
for i := 1; i <= 10; i++ {
if i == 5 {
continue
}
fmt.Printf("%d ", i)
}
}
当i等于5时,执行continue,然后执行i++(结束语句)操作,然后i等于6,正常执行
输出
1 2 3 4 6 7 8 9 10
goto
方便快速跳出循环
格式:
goto XXX 1
XXX: 2
1,2没有顺序,随便放, 但是 ,一般不建议使用太多,容易使程序混乱,代码可读性变差
package main
import "fmt"
func main() {
for i := 1; i <= 10; i++ {
if i == 5 {
goto end
}
fmt.Printf("%d ", i)
}
end:
fmt.Printf("%d ", 1000)
}
输出
1 2 3 4 1000