程序的执行是由上到下逐行执行,叫做 顺序结构 。程序中为了满足某种条件的时候才会执行的结构,叫做 选择结构 ,当满足条件时候循环反复执行多次的代码, 叫做 循环结构。
if分支语句
Go语言中关键字if用于某个条件的判断是否成立,如果成立则会执行大括号{}内部的代码,否则会忽略这段代码。如果有else条件则会执行else条件内的代码块。
if 布尔表达式{
//布尔条件为true时候执行代码
}
if 布尔表达式 {
//条件成立执行代码
}else{
//条件不成立执行代码
}
if 布尔表达式 {
//布尔条件为true时候执行代码
}else if 布尔表达式2{
//布尔条件为false时候执行代码
}else{
//上面都不成立执行代码
}
if在Go语言中的特殊写法
其他语言中if后面都是跟随着条件判断语句,而Go语言中可以在if之后,条件判断之间再加上一段执行语句,执行的结果再用作后面的条件判断。例如:
package main
func main() {
if err := myFunc2(); err > 50 {
println(err) // 100
}
}
func myFunc2() int {
return 100
}
上面代码中err是函数myFunc()返回的结果,执行myFunc()语句之后,再通过条件判断对err进行判断,err的作用域就只能够在这条语句范围内。
switch分支语句
switch和if的区别是,if之后只能是bool类型,而switch可以作用其他类型。 但是case后面的数据必须和变量类型一致。case是没有先后顺序的,只要符合条件就会进入。case后面的数值 必须是唯一的不能重复。default不是必须的,根据实际情况来写。
package main
import "fmt"
func main() {
// switch语法一
switch 变量名{
case 数值1: 分支1
case 数值2: 分支2
case 数值3: 分支3
...
default:
最后一个分支
}
// 语法二 case 后可以跟随多个数值, 满足其中一个就执行
switch value {
case 1,2,3:
fmt.Println("value是1或2或3")
case 4,5,6:
fmt.Println("value是4或5或6")
}
//语法三 可以添加初始化变量 作用于switch内部
switch result := calculate() {
case result < 0:
...
case result > 0:
...
}
}
switch中break和fallthrough
break代表退出当前所有执行,跳出整个switch,在Go中,break不是必须的,可以省略。fallthrough表示强制执行后面没有执行的case代码。
package main
import "fmt"
func main() {
month := 2
switch month {
case 1:
fmt.Println("一月")
case 2:
fmt.Println("二月")
fallthrough
case 3:
fmt.Println("三月")
case 4:
fmt.Println("四月")
}
// fallthrough 语句会强制执行后面的分支,不管条件是否满足
// 输出 二月 三月
}
for循环语句
for循环是程序流程控制中的循环结构,满足条件时,代码便会执行多次,与其他的if、switch满足条件后只执行一次不同。
基于计数器的迭代
for 初始化语句; 条件语句; 修饰语句 {}
代码:
package main
import "fmt"
func main() {
// 基于计数器迭代
for i := 0; i < 5; i++ {
fmt.Printf("This is the %d iteration\n", i)
}
}
输出
This is the 0 iteration
This is the 1 iteration
This is the 2 iteration
This is the 3 iteration
This is the 4 iteration
for循环不加上条件,那么,就是死循环
package main
import "fmt"
func main() {
// 死循环
for {
fmt.Println("loop")
}
}
输出
loop
loop
loop
loop
loop
...
for循环中的break和continue
break用来终止执行for循环语句,终止整个循环
package main
import "fmt"
func main() {
for i := 0; i < 5; i++ {
if i == 3 {
break
}
fmt.Println(i)
}
}输出
0
1
2按理来说,会一直循环输出到4,实际上到了2就停止了,由此可见,循环已被终止。
continue终止当前循环,进入到下一次循环
package main
import "fmt"
func main() {
for i := 0; i < 5; i++ {
if i == 3 {
continue
}
fmt.Println(i)
}
}
输出
0
1
2
4
goto语句
可以跳转到程序中指定的行和嵌套循环里的break标签是一样的,不管后面还有多少代码都不再执行。goto可以搭配标签使用
package main
import "fmt"
func main() {
LABEL1:
for i := 0; i <= 5; i++ {
for j := 0; j <= 5; j++ {
if j == 4 {
continue LABEL1
}
fmt.Printf("i is: %d, and j is: %d\n", i, j)
}
}
}
continue 语句指向 LABEL1,当执行到该语句的时候,就会跳转到 LABEL1 标签的位置。
当j==4和j==5的时候,没有任何输出:标签的作用对象为外部循环,因此i会直接变成下一个循环的值,而此时j的值就被重设为0,即它的初始值。如果将continue改为break,则不会只退出内层循环,而是直接退出外层循环了。另外,还可以使用goto语句和标签配合使用来模拟循环。
return
主要用于返回相应的值,一个函数中,返回的值可以是多个。
package main
func main() {
a, b := myFunc3()
println(a, b)
}
func myFunc3() (a, b int) {
a, b = 100, 200
return a, b
}