本文正在参加「金石计划」
前言
这次接着之前Go
言语的学习,继续来学习Go
言语的根底常识。上一篇Go言语系列:两三天也学不完Go言语的进阶语法常识文章需求两三天时刻,那这次估计只需一天时刻就能学会Go
言语的流程控制语法,不出意外这次也要耐性看完哦。
Go言语的流程控制
前次聊到Go
言语进阶语法常识,这次书接上回,接着往下聊,慢慢地往后深化→
一、if else
在Go
言语,if else
条件判别格局如下:
if 表达式1 {
分支1
} else if 表达式2 {
分支2
} else {
分支3
}
- 当表达式1的成果为 true 时,会履行分支1的代码;
- 当表达式1的成果为 false 时,会履行表达式2,若成果为 true, 则会履行分支2的代码。
- 当时面的条件都不满意,即都为 false 时,会履行分支3的代码。
留意:Go 言语中规定:if 的 左括号 ‘’{‘’ 有必要与 if 表达式放在同一行,假如强行放置在其他位置,会发生如下编译过错。
1.1 if else示例
package main
import "fmt"
func main() {
a := 1
if a == 1 {
fmt.Println("a等于1")
} else {
fmt.Println("a不等于1")
}
}
代码输出如下:
1.2 if的特别写法
在if
表达式之前增加一个履行句子,再依据变量进行判别,代码如下:
package main
import "fmt"
func main() {
if a := 1; a == 2 {
fmt.Println("a等于1")
} else {
fmt.Println("a不等于1")
}
}
代码输出如下:
二、for循环
在Go
言语中,循环需求运用关键字for
来完结,格局如下:
for 初始句子;条件表达式;结束句子 {
循环体代码
}
for
循环会不停地进行循环,直到条件表达式返回false
才推出循环,即履行for
循环}
后边的代码。
2.1 初始句子
package main
import "fmt"
func main() {
for i := 0; i < 10; i++ {
fmt.Println("履行循环了")
}
}
代码输出如下:
别的,初始句子能够不写,但是初始句子后的分号有必要写,如下:
package main
import "fmt"
i := 0
func main() {
for ; i < 10; i++ {
fmt.Println("履行循环了")
}
}
需留意,假如初始句子放在for
循环句子之前声明,则变量的作用域不止在for
循环内,for
循环外也能够访问到初始的变量。
下面这种写法也能够正常循环,如下:
package main
import "fmt"
i := 0
func main() {
for i < 10 {
i++
fmt.Println("履行循环了")
}
}
此种写法的输出成果也和上面两种写法的成果共同的。
2.2 死循环
条件句子也能够不写,不写就代表着没有停止条件,则会陷入死循环。如下:
package main
import "fmt"
i := 0
func main() {
for ; ; i++ {
fmt.Println("履行循环了")
}
}
履行上述代码就会在控制台一直打印”履行循环了”,需求运用Ctrl + c
停止。
下面的代码写能够形成死循环,如下:
package main
import "fmt"
func main() {
for {
fmt.Println("履行循环了")
}
}
三、for range循环
在Go
言语中,还能够经过forrange
来遍历数组、切片、字符串、map等。
3.1 遍历数组、切片和字符串
经过for range
便利数组、切片、字符串的返回值index
表示下标索引,value代表下表对应的值。
package main
import "fmt"
func main() {
s := []int{100, 200, 300} // 切片
for index, value := range s {
fmt.Println(index, value)
}
}
代码输出成果:
下面来演示遍历字符串,如下:
package main
import "fmt"
func main() {
str := "hello world"
for index, value := range str {
fmt.Printf("%d %c\n", index, value)
}
}
代码输出成果:
3.2 遍历map字典
经过for range
遍历map字典
会返回键和值,称为键值对,它们总是一对一出现。代码如下:
package main
import "fmt"
func main() {
m := map[int]string{
1: "aaa",
2: "bbb",
}
for key, value := range m {
fmt.Printf("%d %s\n", key, value)
}
}
代码输出成果:
留意:对map字典
进行遍历时,遍历出的键值对是无序的,假如需求有序输出,需求先排序。
3.3 运用匿名变量
假如在for range
遍历中只想获取下标或值,能够运用匿名变量。所谓的匿名变量能够理解为是一个占位符,不会占有内存,也不会占用变量名。如下:
package main
import "fmt"
func main() {
s := []int{100, 200, 300}
for _, value := range s {
fmt.Println(value)
}
}
代码输出成果:
四、switch
在Go
言语中,可运用switch
句子能够非常方便地对大量值进行条件判别。
4.1 根底语法
Go
言语中switch
中的每一个case
都是独立代码块,无需经过break
句子跳出代码块,以防止履行到下一个case
代码块。
switch var { // 从上往下匹配,匹配上就履行对应的代码,履行完不会履行下一个case,且不需求break
case v1:
// do something
case v2:
// do something
case v3:, v4: // 匹配多个值,有一个满意条件即可
// do something
default:
// do something
}
下面就来看一下示例代码,如下:
package main
import "fmt"
func main() {
day := 3
switch day {
case 1:
fmt.Println("今天是周一")
case 2:
fmt.Println("今天是周二")
case 3:
fmt.Println("今天是周三")
case 4:
fmt.Println("今天是周四")
case 5:
fmt.Println("今天是周五")
case 6, 7:
fmt.Println("今天是周末")
default:
fmt.Println("日期不正确")
}
}
代码输出成果:
还能够在swtich
里面初始化变量,如下:
package main
import "fmt"
func main() {
switch day := 3; day {
case 1:
fmt.Println("今天是周一")
case 2:
fmt.Println("今天是周二")
case 3:
fmt.Println("今天是周三")
case 4:
fmt.Println("今天是周四")
case 5:
fmt.Println("今天是周五")
case 6, 7:
fmt.Println("今天是周末")
default:
fmt.Println("日期不正确")
}
}
4.2 其他用法
case
后边除了界说常量以外,还能够像if
句子相同增加表达式,代码如下:
package main
import "fmt"
func main() {
switch score := 90; {
case score > 90:
fmt.Println("优异")
case score > 80:
fmt.Println("中等")
case score > 70:
fmt.Println("杰出")
case score > 60:
fmt.Println("及格")
default:
fmt.Println("继续努力")
}
}
代码输出成果:
4.3 fallthrough
fallthrough
便是强制履行下一个case,不会判别满不满意条件。如下:
package main
import "fmt"
func main() {
switch score := 90; {
case score > 90:
fmt.Println("优异")
case score > 80:
fmt.Println("中等")
fallthrough
case score > 70:
fmt.Println("杰出")
case score > 60:
fmt.Println("及格")
default:
fmt.Println("继续努力")
}
}
代码输出成果:
五、goto跳转
在Go
言语中,goto
句子经过标签完成代码间的跳转。它一般会被运用在快速跳出循环、防止界说重复代码等。
package main
import "fmt"
func main() {
fmt.Println("aaa")
goto TIGER
fmt.Println("bbb")
fmt.Println("ccc")
TIGER:
fmt.Println("ddd")
}
代码输出成果:
需求留意:goto和标签之间不能有心变老的声明,不然会报错。
package main
import "fmt"
func main() {
fmt.Println("aaa")
goto TIGER
num := 100 // 报错
fmt.Println("bbb")
fmt.Println("ccc")
TIGER:
fmt.Println("ddd")
}
六、break句子
在Go
言语中,break
句子用来停止循环。如下:
6.1 跳出单层循环
package main
import "fmt"
func main() {
i:= 0
for ; i < 10; i++ {
if i==4 {
break
}
fmt.Println(i)
}
}
代码输出成果:
6.2 跳出多层循环
package main
import "fmt"
func main() {
for i:= 0; i < 4; i++ {
for j := 0; j < 4; j++ {
if j==2 {
break
}
fmt.Println(i, j)
}
}
}
代码输出成果:
停止整个循环
经过break
句子调配标签能够跳出代码块。如下:
package main
import "fmt"
func main() {
STOP:
for i:= 0; i < 4; i++ {
for j := 0; j < 4; j++ {
if j==2 {
break STOP // 停止整个循环
}
fmt.Println(i, j)
}
}
}
代码输出成果:
七、continue句子
在Go
言语中,continue
句子是跳过当次循环,进入下一次循环。如下:
package main
import "fmt"
func main() {
i:= 0
for ; i < 10; i++ {
if i==4 {
continue
}
fmt.Println(i)
}
}
代码输出成果:
continue
句子也能够调配标签一同运用,和break是类似的。如下:
package main
import "fmt"
func main() {
LABEL:
for i:= 0; i < 4; i++ {
for j := 0; j < 4; j++ {
if j==2 {
break LABEL // 类似于此处不运用标签的break
}
fmt.Println(i, j)
}
}
}
代码输出好成果:
最后,掌握流程控制句子是成为一名优异的Go程序员的基本要求。经过掌握这些句子,能够让程序的运行更加顺畅,然后提高程序的功率和性能。赶紧一同学起来吧,一同去卷go言语开发的饭碗^_^
往期精彩文章
- Go言语系列:两三天也学不完Go言语的进阶语法常识
- Go言语系列:半天学完Go言语的最最根底的语法常识
- Go言语系列:怎么搭建 Go言语开发环境?
- Go言语系列:Go从哪里来,Go将去哪里?
后语
小伙伴们,假如觉得本文对你有些许协助,点个或者➕个关注再走呗^_^ 。别的假如本文章有问题或有不理解的部分,欢迎大家在评论区评论指出,咱们一同评论共勉。