本文正在参加「金石计划」

前言

这次接着之前Go言语的学习,继续来学习Go言语的根底常识。上一篇Go言语系列:两三天也学不完Go言语的进阶语法常识文章需求两三天时刻,那这次估计只需一天时刻就能学会Go言语的流程控制语法,不出意外这次也要耐性看完哦。

Go言语的流程控制

前次聊到Go言语进阶语法常识,这次书接上回,接着往下聊,慢慢地往后深化→

一、if else

Go言语,if else条件判别格局如下:

if 表达式1 {
    分支1 
} else if 表达式2 { 
    分支2 
} else { 
    分支3 
}
  1. 当表达式1的成果为 true 时,会履行分支1的代码;
  2. 当表达式1的成果为 false 时,会履行表达式2,若成果为 true, 则会履行分支2的代码。
  3. 当时面的条件都不满意,即都为 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")
    }
}

代码输出如下:

Go语言系列:掌握流程控制,让程序顺畅如同滑雪道!

1.2 if的特别写法

if表达式之前增加一个履行句子,再依据变量进行判别,代码如下:

package main
import "fmt"
func main() {
    if a := 1; a == 2 {
        fmt.Println("a等于1")
    } else {
        fmt.Println("a不等于1")
    }
}

代码输出如下:

Go语言系列:掌握流程控制,让程序顺畅如同滑雪道!

二、for循环

Go言语中,循环需求运用关键字for来完结,格局如下:

for 初始句子;条件表达式;结束句子 { 
    循环体代码 
}

for循环会不停地进行循环,直到条件表达式返回false才推出循环,即履行for循环}后边的代码。

2.1 初始句子

package main
import "fmt"
func main() { 
    for i := 0; i < 10; i++ {
        fmt.Println("履行循环了")
    }
}

代码输出如下:

Go语言系列:掌握流程控制,让程序顺畅如同滑雪道!

别的,初始句子能够不写,但是初始句子后的分号有必要写,如下:

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)
    }
}

代码输出成果:

Go语言系列:掌握流程控制,让程序顺畅如同滑雪道!

下面来演示遍历字符串,如下:

package main
import "fmt"
func main() { 
    str := "hello world"
    for index, value := range str {
            fmt.Printf("%d %c\n", index, value)
    }
}

代码输出成果:

Go语言系列:掌握流程控制,让程序顺畅如同滑雪道!

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)
    }
}

代码输出成果:

Go语言系列:掌握流程控制,让程序顺畅如同滑雪道!

留意:对map字典进行遍历时,遍历出的键值对是无序的,假如需求有序输出,需求先排序。

3.3 运用匿名变量

假如在for range遍历中只想获取下标或值,能够运用匿名变量所谓的匿名变量能够理解为是一个占位符,不会占有内存,也不会占用变量名。如下:

package main
import "fmt"
func main() {
    s := []int{100, 200, 300}
    for _, value := range s {
        fmt.Println(value)
    }
}

代码输出成果:

Go语言系列:掌握流程控制,让程序顺畅如同滑雪道!

四、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("日期不正确")
    }
}

代码输出成果:

Go语言系列:掌握流程控制,让程序顺畅如同滑雪道!

还能够在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("继续努力")
    }
}

代码输出成果:

Go语言系列:掌握流程控制,让程序顺畅如同滑雪道!

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("继续努力")
    }
}

代码输出成果:

Go语言系列:掌握流程控制,让程序顺畅如同滑雪道!

五、goto跳转

Go言语中,goto句子经过标签完成代码间的跳转。它一般会被运用在快速跳出循环、防止界说重复代码等。

package main
import "fmt"
func main() {
    fmt.Println("aaa")
    goto TIGER
    fmt.Println("bbb")
    fmt.Println("ccc")
    TIGER:
    fmt.Println("ddd")
}

代码输出成果:

Go语言系列:掌握流程控制,让程序顺畅如同滑雪道!

需求留意:goto和标签之间不能有心变老的声明,不然会报错。

package main
import "fmt"
func main() {
    fmt.Println("aaa")
    goto TIGER
    num := 100 // 报错
    fmt.Println("bbb")
    fmt.Println("ccc")
    TIGER:
    fmt.Println("ddd")
}

Go语言系列:掌握流程控制,让程序顺畅如同滑雪道!

六、break句子

Go言语中,break句子用来停止循环。如下:

6.1 跳出单层循环

package main
import "fmt"
func main() { 
    i:= 0
    for ; i < 10; i++ {
        if i==4 {
                break
        }
        fmt.Println(i)
    }
}

代码输出成果:

Go语言系列:掌握流程控制,让程序顺畅如同滑雪道!

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)
        }
    }
}

代码输出成果:

Go语言系列:掌握流程控制,让程序顺畅如同滑雪道!

停止整个循环

经过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)
        }
    }
}

代码输出成果:

Go语言系列:掌握流程控制,让程序顺畅如同滑雪道!

七、continue句子

Go言语中,continue句子是跳过当次循环,进入下一次循环。如下:

package main
import "fmt"
func main() { 
    i:= 0
    for ; i < 10; i++ {
        if i==4 {
            continue
        }
        fmt.Println(i)
    }
}

代码输出成果:

Go语言系列:掌握流程控制,让程序顺畅如同滑雪道!

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从哪里来,Go将去哪里?

后语

小伙伴们,假如觉得本文对你有些许协助,点个或者➕个关注再走呗^_^ 。别的假如本文章有问题或有不理解的部分,欢迎大家在评论区评论指出,咱们一同评论共勉。

Go语言系列:掌握流程控制,让程序顺畅如同滑雪道!