if/else
基本使用
if/else
应该是每个编程语言中都具备的基本分支结构。
需要注意的是if||else
与{
要放在同一行上,否则会抛出异常。
另外,当多个else if
出现时,不同分支只会执行一个。
if 表达式1 {
分支1
} else if 表达式2 {
分支2
} else{
分支3
}
如下,判断成绩的等级。
package main
import (
"fmt"
)
func main() {
var grades int8 = 82
if grades > 90{
fmt.Println("成绩优异")
}else if grades > 80{
fmt.Println("成绩不错")
}else if grades > 60{
fmt.Println("成绩及格")
}else if grades > 40 {
fmt.Println("成绩较差")
}else{
fmt.Println("建议退学")
}
}
作用域
if
分支代码块具有块级作用域。我们可以在执行if
时定义一个变量,该变量不能在块级作用域外使用。
注意:只能使用短变量的声明方式
package main
import (
"fmt"
)
func main() {
if grades := 82; grades > 90{
fmt.Println("成绩优异")
}else if grades > 80{
fmt.Println("成绩不错")
}else if grades > 60{
fmt.Println("成绩及格")
}else if grades > 40 {
fmt.Println("成绩较差")
}else{
fmt.Println("建议退学")
}
}
switch/case
基本使用
switch/case
可以让上述代码变得更加简洁。
同其他语言一样,一个switch
中只能有一个default
,default
通常放在最下面。
package main
import (
"fmt"
)
func main() {
var grades int8 = 82
switch{
case grades > 90 :
fmt.Println("成绩优异")
// 不需要进行break
case grades > 60 :
fmt.Println("成绩及格")
case grades > 40:
fmt.Println("成绩较差")
default:
fmt.Println("建议退学")
}
}
作用域
同样,switch
也拥有块级作用域。我们可以在switch
作用域内定义一个变量,该作用域外不能使用该变量。
package main
import (
"fmt"
)
func main() {
switch grades := 82; { // 注意结束的分号
case grades > 90:
fmt.Println("成绩优异")
// 不需要进行break
case grades > 60:
fmt.Println("成绩及格")
case grades > 40:
fmt.Println("成绩较差")
default:
fmt.Println("建议退学")
}
}
fallthrough
fallthrough
语法可以执行满足条件的case
的下一个case
,是为了兼容C
语言中的case
设计的。
package main
import (
"fmt"
)
func main() {
switch age := 18; { // 注意结束的分号
case age < 18:
fmt.Println("未成年")
case age >= 18:
fmt.Println("成年了")
fallthrough // 穿透,执行下一个case 无论是否为true
case age > 30:
fmt.Println("生活忙碌")
default:
fmt.Println("枯燥无味")
}
// 成年了
// 生活忙碌
}
for
索引循环
条件为true
循环,条件为false
则退出循环。
下面是使用索引循环对数组进行遍历。
package main
import (
"fmt"
)
func main() {
var arr = [...]string{"①","②","③","④","⑥"} // 定义string数组
for index := 0; index < len(arr); index++{
fmt.Println(index) // 打印索引值
fmt.Println(arr[index]) // 打印元素值
}
}
迭代变量
迭代变量可以在for
循环的外部定义,但是必须要使用;
进行占位。
package main
import (
"fmt"
)
func main() {
var arr = [...]string{"①","②","③","④","⑥"} // 定义string数组
var index int; // int类型默认为0
for ; index < len(arr); index++{
fmt.Println(index) // 打印索引值
fmt.Println(arr[index]) // 打印元素值
}
}
while循环
由于Go
语言中没有while
循环,所以while
循环可以用for
来进行完成。
具体的步骤就是省略迭代变量,省略结束条件。
package main
import (
"fmt"
)
func main() {
var counter int
for {
if counter >= 5 {
break
}
fmt.Printf("第%d次执行
", counter+1)
counter++
}
}
for/range
普通的索引循环只能拿出索引,因此十分的不方便。此时可使用for/range
,迭代变量有两个。
第一个为索引值,第二个为元素本身。
package main
import (
"fmt"
)
func main() {
var arr = [...]string{"①", "②", "③", "④", "⑥"} // 定义string数组
for index, element := range arr{
fmt.Printf("索引值:%d
", index)
fmt.Printf("元素值:%v
", element)
}
}
退出循环
goto
当有多层循环嵌套时,可给一个代码块指定一个标签,当执行到该标签时,跳转到标签代码块。
package main
import (
"fmt"
)
func main() {
for i := 0; i < 10; i++ {
for j := 0; j < 10; j++ {
if j == 5 {
goto TAG
}
fmt.Println(j)
}
}
TAG:
fmt.Println("执行标签代码块")
return // 结束main函数
}
break
break
用于跳过本层循环。
package main
import (
"fmt"
)
func main() {
for i := 0; i < 10; i++ {
for j := 0; j < 10; j++ {
if j == 5 {
fmt.Println("跳过本层循环")
break
}
}
fmt.Println("执行外层循环")
break
}
fmt.Println("代码执行结束")
}
continue
continue
用于跳过本次循环。
package main
import (
"fmt"
)
func main() {
for i := 0; i < 10; i++ {
if i==5{
fmt.Println("跳过本次循环")
}else{
fmt.Println(i)
}
}
fmt.Println("代码执行结束")
}