目录
- 前言
- if else
- 基本写法
- 特殊写法
- for(循环结构)
- for 基本写法
- 不写初始语句,但分号必须要加
- 不写初始语句和结束语句
- 无限循环(死循环)
- break和continue
- for range(键值循环)
- switch和case
- goto(跳转到指定标签)
前言
go语言常用的流程控制有if
和for
,switch
和goto
是为了简化代码,降低重复代码而生的结构,是扩展类的流程控制。
if else
基本写法
//demo1
package main//if 语句基本写法
import "fmt"func main() {var score = 80if score > 90 {fmt.Println("优秀")} else if score > 75 {fmt.Println("良好")} else if score > 60 {fmt.Println("合格")} else {fmt.Println("继续加油!")}fmt.Println(score)
}
特殊写法
//demo2
package mainimport "fmt"
//if 特殊写法
func main() {if score := 80; score > 90 { //初始化写在条件语句内fmt.Println("优秀")} else if score > 75 {fmt.Println("良好")} else if score > 60 {fmt.Println("合格")} else {fmt.Println("继续加油!")}//fmt.Println(score) //在外面打印会报错
}
for(循环结构)
go语言中的所有循环类型均用for
关键字来完成。
for 基本写法
//demo3
func main() {for i := 0; i < 10; i++ {fmt.Println(i)}
}
不写初始语句,但分号必须要加
//demo4
func main() {i := 0for ; i < 10; i++ {fmt.Println(i)}
}
不写初始语句和结束语句
这种写法相当于某些编程语言中的 while
语句。
//demo5
func main() {i := 0for i < 10 {fmt.Println(i)i++}
}
无限循环(死循环)
//demo6
func main() {for {fmt.Println("hello world")}
}
break和continue
循环可以通过break
和continue
跳出循环
break
是直接跳出循环
//demo7
func main() {for i := 0; i < 10; i++ {if i == 5 {break}fmt.Println(i)}
}
continue
是跳过本次循环,进入到下一次循环
//demo8
func main() {for i := 0; i < 10; i++ {if i == 5 {continue}fmt.Println(i)}
}
- break语句可以结束
for
、switch
和select
的代码块。break
语句还可以在语句后面添加标签,表示退出某个标签对应的代码块,标签要求必须定义在对应的for
、switch
和select
的代码块上。
//demo9
func main() {
BREAKDEMO:for i := 0; i < 10; i++ {if i == 3 {break BREAKDEMO}fmt.Println(i)}fmt.Println("hhh")
}
continue
语句可以结束当前循环,开始下一次的循环迭代过程,仅限在for
循环内使用。在continue
语句后添加标签时,表示开始标签对应的循环。
//demo10
func main() {
FORLOOP:for i := 0; i < 10; i++ {if i == 3 {continue FORLOOP}fmt.Println(i)}fmt.Println("hhh")
}
for range(键值循环)
Go语言中可以使用for range
遍历数组、切片、字符串、map
及通道(channel
)。 通过for range遍历的返回值有以下规律:
- 数组、切片、字符串返回索引和值。
- map 返回键和值。
- 通道(channel)只返回通道内的值。
//demo11
func main() {for i := range 5 {fmt.Println(i)}
}
switch和case
switch
可以简化多个if...else
代码。比如和星期有关系,一星期有七天。
如果用if...else
来写:
//demo12
func main() {day := 5if day == 1 {fmt.Println("Monday")} else if day == 2 {fmt.Println("Tuesday")} else if day == 3 {fmt.Println("Wednesday")} else if day == 4 {fmt.Println("Thursday")} else if day == 5 {fmt.Println("Friday")} else if day == 6 {fmt.Println("Saturday")} else if day == 7 {fmt.Println("Sunday")}
}
如果用switch
来写:
//demo13
func main() {day := 5switch day {case 1:fmt.Println("Monday")case 2:fmt.Println("Tuesday")case 3:fmt.Println("Wednesday")case 4:fmt.Println("Thursday")case 5:fmt.Println("Friday")case 6:fmt.Println("Saturday")case 7:fmt.Println("Sunday")default:fmt.Println("Day")}
}
case
还可以一次判断多个值。比如我判断是奇数还是偶数:
//demo14
func main() {num := 5switch num {case 1, 3, 5, 7:fmt.Println("奇数")case 2, 4, 6, 8:fmt.Println("偶数")default:fmt.Println("啥也不是")}
}
一个switch语句可以有多个case,但是只能由一个default
case
中使用表达式
//demo15
func main() {age := 50switch { //switch后面不跟变量case age > 60:fmt.Println("老年人")case age < 60:fmt.Println("劳动者")default:fmt.Println("不是人")}
}
goto(跳转到指定标签)
//demo16
func main() {for i := 0; i < 10; i++ {if i == 5 {goto flag}fmt.Println(i)}returnflag:fmt.Println("结束循环")
}