三、Go语言控制语句
@Author:Runsen
Go的语法很简单,其实也有一部分就是因为Go语言中控制语句关键字很少,但却完全满足了我们的需求,下面我列举了Go语言中常用的控制语言,对每一个控制语句都进行代码展示与解释。
if 语句
依据条件是否满足确定执行哪个分支。
语法:
if 条件 1 {
分支 1
} else if 条件 2 {
分支 2
} else if 条件 ... {
分支 ...
} else {
分支 else
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
注意:Go语言规定与if匹配的左括号{
必须与if
和表达式放在同一行,{
放在其他位置会触发编译错误。同理,与else匹配的{
也必须与else写在同一行,else也必须与上一个if
或else if
右边的大括号在同一行。
package main
import (
"fmt"
)
func main() {
age := 20
if age > 18 {
fmt.Println("你已经是成年人了")
} else if age > 6 {
fmt.Println("你还是一个小屁孩")
} else {
fmt.Println("你还是一个小娃娃")
}
}
你已经是成年人了
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
switch语句
有时候我们有大量if…else if…else语句,这样写不美观,也不够直观。对于这类需求,Go语言用switch 语句对其进行条件判断,其基本语法如下:
switch 判断变量 { case 表达式1: 语句1 case 表达式2: 语句2 ...... default: 默认语句
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
例子:我们根据一个人的年龄去判断属于哪一年龄段。
package main
import "fmt"
func main() {
age := 18
switch age {
case 60:
fmt.Print("老人")
case 30:
fmt.Print("中年")
case 18:
fmt.Print("青年")
case 6:
fmt.Print("少年")
default:
fmt.Print("你是一个人才")
}
}
青年
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
注意:Go语言规定每个switch只能有一个default分支,还有case没有数值大于小于的比较
这里需要补充一个:fallthrough。fallthrough可以执行满足条件的case的下一个case,是为了兼容C语言中的case设计的。如下:
package main
import "fmt"
func main() {
s := "a"
switch {
case s == "a": fmt.Println("a") fallthrough
case s == "b": fmt.Println("b")
case s == "c": fmt.Println("c")
default: fmt.Println("...")
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
这样在执行s == "a"
的时候会同时执行s == "b"
。
for循环
在Go语言不再使用 do 或 while 循环,只有一种循环语句,那就是for循环 ,其基本格式如下:
for 初始语句;条件表达式;结束语句{ 循环体
}
- 1
- 2
- 3
下面举一个例子,比如输出0到9。
package main
import "fmt"
func main() {
for i := 0; i < 10; i++ {
fmt.Println(i)
}
}
0
1
2
3
4
5
6
7
8
9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
如果for后面不跟任何语句,则是无限循环,如下所示。
package main
import "fmt"
func main() {
for {
fmt.Println(我们学习Go")
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
Go语言中可以使用for range遍历数组、切片、字符串、map 及通道(channel)。通过for range遍历的返回值有以下规律:
- 数组、切片、字符串返回索引和值。
- map返回键和值。
- 通道(channel)只返回通道内的值。
下面举一个例子,遍历字符串,如下所示。
package main
import "fmt"
func main() {
s := "Hello"
for i, v := range s { fmt.Printf("%d - %c \n", i, v)
}
}
0 - H
1 - e
2 - l
3 - l
4 - o
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
如果我们不需要索引值,我们可以用匿名变量去接收,如下所示。
package main
import "fmt"
func main() {
s := "Hello"
for _, v := range s {
fmt.Printf("%c \n", v)
}
}
H
e
l
l
o
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
还有两个关键词,跳出循环有break和continue,break和continue和其他编程语言相同。
break:跳出当前循环
package main
import "fmt"
func main() {
for i := 0; i < 10; i++ {
if i == 5 { break
}
fmt.Println(i)
}
}
0
1
2
3
4
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
continue:跳出本次循环
package main
import "fmt"
func main() {
for i := 0; i < 10; i++ { if i == 5 { continue } fmt.Println(i)
}
}
0
1
2
3
4
6
7
8
9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
goto语句
在双层嵌套的for循环,经常见到goto语句。goto语句可以在快速跳出循环、避免重复退出上有一定的帮助。
转到goto语句的语法如下:
goto label;
..
label: statement;
- 1
- 2
- 3
在这里,label可以是除去关键字任何纯文本,它可以在任何地方设置在Go程序的上方或下方,以使用goto语句。
这边举一个例子,用 goto 的方式来实现一个打印 10到19的循环。
package main
import "fmt"
func main() { var a int = 10 LOOP: for a < 20 { if a == 15 { a = a + 1 goto LOOP } fmt.Printf("value of a: %d\n", a) a++ }
}
value of a: 10
value of a: 11
value of a: 12
value of a: 13
value of a: 14
value of a: 16
value of a: 17
value of a: 18
value of a: 19
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
文章来源: maoli.blog.csdn.net,作者:刘润森!,版权归原作者所有,如需转载,请联系作者。
原文链接:maoli.blog.csdn.net/article/details/107817291
- 点赞
- 收藏
- 关注作者
评论(0)