流程控制是每种编程语言控制逻辑走向和执行次序的重要部分,流程控制可以说是一门语言的“经脉”
Go 语言中最常用的流程控制有if和for,而switch和goto主要是为了简化代码、降低重复代码而生的结构,属于扩展类的流程控制。
1. if else(分支结构)
推荐if后面不适用括号,当然也可以使用括号括起来
func main() {
var num = 10
if num == 10 {
fmt.Println("hello == 10")
} else if(num > 10) {
fmt.Println("hello > 10")
} else {
fmt.Println("hello < 10")
}
}
if的另外一种写法,下面的方法的区别是 num2是局部变量
if num2:= 10; num2>=10 {
fmt.Println("hello >=10")
}
2. for 循环结构
Go语言中的所有循环类型均可使用for关键字来完成
for循环的基本格式如下:
for 初始语句; 条件表达式; 结束语句 {
循环体
}
条件表达式返回true时循环体不停地进行循环,直到条件表达式返回false时自动退出循环
实例:打印1 ~ 10
for i := 0; i < 10; i++ {
fmt.Printf("%v ", i+1)
}
无限循环
注意,在Go语言中,没有while语句,我们可以通过for来代替
for {
循环体
}
for循环可以通过break、goto、return、panic语句退出循环
3. for range(键值循环)
Go 语言中可以使用for range遍历数组、切片、字符串、map及通道(channel)。通过for range遍历的返回值有以下规律:
- 数组、切片、字符串返回索引和值。
- map返回键和值。
- 通道(channel)只返回通道内的值。
实例:遍历字符串
var str = "你好golang"
for key, value := range str {
fmt.Printf("%v - %c ", key, value)
}
遍历切片(数组)
var array = []string{"php", "java", "node", "golang"}
for index, value := range array {
fmt.Printf("%v %s ", index, value)
}
4. switch case(选择语句)
使用switch语句可方便的对大量的值进行条件判断
extname := ".a"
switch extname {
case ".html": {
fmt.Println(".html")
break
}
case ".doc": {
fmt.Println(".doc")
break
}
case ".js": {
fmt.Println(".js")
}
default: {
fmt.Println("其它后缀")
}
}
Go语言规定每个switch只能有一个default分支。
一个分支可以有多个值,多个case值中间使用英文逗号分隔。
switch的另外一种写法
switch extname := ".a"; extname {
case ".html": {
fmt.Println(".html")
break
}
case ".doc": {
fmt.Println(".doc")
break
}
case ".js": {
fmt.Println(".js")
}
default: {
fmt.Println("其它后缀")
}
}
同时一个分支可以有多个值
extname := ".txt"
switch extname {
case ".html": {
fmt.Println(".html")
break
}
case ".txt",".doc": {
fmt.Println("传递来的是文档")
break
}
case ".js": {
fmt.Println(".js")
}
default: {
fmt.Println("其它后缀")
}
}
tip:在golang中,break可以不写,也能够跳出case,而不会执行其它的。
如果我们需要使用switch的穿透fallthrought
,fallthrough
语法可以执行满足条件的 case 的下一个case,为了兼容c语言中的case设计
extname := ".txt"
switch extname {
case ".html": {
fmt.Println(".html")
fallthrought
}
case ".txt",".doc": {
fmt.Println("传递来的是文档")
fallthrought
}
case ".js": {
fmt.Println(".js")
fallthrought
}
default: {
fmt.Println("其它后缀")
}
}
fallthrought 只能穿透紧挨着的一层,不会一直穿透,但是如果每一层都写的话,就会导致每一层都进行穿透
5. break:跳出循环
Go语言中break 语句用于以下几个方面:
- 用于循环语句中跳出循环,并开始执行循环之后的语句。
- break在switch(开关语句)中在执行一条case后跳出语句的作用。
- 在多重循环中,可以用标号label标出想break的循环。
break
语句可以结束for
、switch
和select
的代码块。break
语句还可以在语句后面添加标签,表示退出某个标签对应的代码块,标签要求必须定义在对应的for
、switch
和select
的代码块上。
var i = 0
for {
if i == 10{
fmt.Println("跳出循环")
break
}
i++
fmt.Println(i)
}
6. go:跳转到指定标签
goto 语句通过标签进行代码间的无条件跳转。goto 语句可以在快速跳出循环、避免重复退出上有一定的帮助。Go语言中使用goto语句能简化一些代码的实现过程。
var n = 20
if n > 24 {
fmt.Println("成年人")
} else {
goto lable3
}
fmt.Println("aaa")
fmt.Println("bbb")
lable3:
fmt.Println("ccc")
fmt.Println("ddd")
7. continue : 继续下次循环
continue语句可以结束当前循环,开始下一次的循环迭代过程,仅限在for循环内使用。
在 continue语句后添加标签时,表示开始标签对应的循环。例如:
func continueDemo() {
forloop1:
for i := 0; i < 5; i++ {
// forloop2:
for j := 0; j < 5; j++ {
if i == 2 && j == 2 {
continue forloop1
}
fmt.Printf("%v-%v\n", i, j)
}
}
}