控制结构
1.if语句
if err, file := os.Open("xxx"); err == nil {
//do smoething
} else {
return nil, err
}
if score >= 90 {
} else if score >= 80 {
} else {
}
2.switch语句
switch 语句会根据传入的参数检测并执行符合条件的分支.
switch 的语法特点如下:
switch 和 if 语句一样, switch后面可以带一个可选的简单的初始化语句
switch 后面的表达式也是可选的, 如果没有表达式, 则case子句是一个布尔表达式. 而不是一个值, 此时就相当于多重if else语句
switch 条件表达式的值不像c语言那样必须限制为整数, 可以是任意支持相等比较运算的类型变量
通过fallthough语句来强制执行下一个case子句(不再判断下一个case子句的条件是否满足)
switch支持default语句, 当所有的case分支都不符合时,执行default语句,并且default语句可以放到任意位置,并不影响switch的逻辑判断
swith和.(type)结合可以进行类型的查询, (//todo::)
switch i := "y"; i { //switch后面可以带上一个初始化语句
case "y", "Y": //多个case值使用逗号分隔
fmt.Println("yes")
fallthrough //fallthrough会跳过接下来的case条件,
// 直接执行下一个case语句
case "n", "N":
fmt.Println("no")
}
switch {
case score >= 90:
grade = "A"
case score >= 80:
grade = "B"
default:
grade = "F"
}
3.for语句
Go 语言仅支持一种循环语句,即for语句
for init; condition; post {} //类似c里面的for循环语句
for condition {} // 类似c里面的while循环语句
for {} // 类似c里面的while(1)死循环语句
// 访问map
for key, value := range map {}
for key := range map{}
// 访问数据
for index, value := range array {}
for index := range array {}
for _, value := range array{}
// 访问切片
for index, value := range slice {}
for index := range slice {}
for _, value := range slice{}
// 访问通道
for value := range channel {}
4.标签和跳转
Go 语言使用标签(Lable)来标识一个语句的位置, 用于goto, break, continue语句的跳转, 标签的语法是:
Lable: Statement
标签的具体作用和使用见下面的goto、break、continue
goto
goto 语句用于函数的内部的跳转,需要配合标签一起使用,具体的格式如下:
goto Lable //goto Lable 的语义是跳转到标签名后的语句处执行,
goto语句有以下几个特点:
goto 语句只能在函数内跳转。
goto 语句不能跳过内部变量声明语句,这些变量在goto语句 的标签语句处又是可见的。
例如:
goto L //BAD, 跳过了v := 3这条语句是不允许的
v := 3
L:
goto语句只能跳到同级作用域或者上层作用域内,不能跳到内部作用域内。
例如 :
if n%2 == 1 {
goto L1
}
for n > 0 {
f()
n--
L1:
f()
n--
}
break
break 用于函数内跳出 for、 switch、 select 语句的执行,有两种使用格式:
单独使用,用于跳出 break 当前所在的 for、 switch、 select 语句的执行。
和标签一起使用,用于跳出标签所标识的 for、 switch、 select 语句的执行,可用于跳出多重循环,但标签和 break 必须在同一个函数内。
例如:
L1:
for i := 0; ; i++ {
for j := 0; ; j++ {
if i >= 5 {
break L1 // 跳出L1标签所在的for循环
}
if j > 10 {
break // 默认仅跳出离break最近的内层循环
}
}
}
continue
continue 用于跳出 for 循环的本次选代,跳到 for 循环的下一次选代的 post 语句处执行,也有两种使用格式:
单独使用,用于跳出 continue 当前所在的 for 循环的本次迭代 。
和标签一起使用,用于跳出标签所标识的 for 语句的本次选代,但标签和 continue 必须 在同一个函数内。
例如 :
L1:
for i := 0; ; i++ {
for j := 0; ; j++ {
if i >= 5 {
continue L1 // 跳出L1标签所在处的for循环
}
if j > 10 {
continue // 继续下次循环
}
}
}
5.return和函数调用
re阳m i吾句也能引 发控制流程的跳转,用于函数和方法的退出。
函数和方法的调用也能引 发程序控制流的跳转,这些在后续章节中会详细介绍。