likes
comments
collection
share

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

作者站长头像
站长
· 阅读数 17

前言

这次接着之前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语言中,还可以通过for range来遍历数组 、切片 、字符串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语言系列:掌握流程控制,让程序顺畅如同滑雪道!