Go 语言基础(2)| 青训营笔记

52 阅读3分钟

这是我参加字节后端训练营的笔记,承接上文,这一篇继续写写Go语言的基础最基础的语法,既作为自己的笔记,又可以作为文档后面需要时进行查询和阅读。

For 循环

for 是 Go 中唯一的循环结构,这里我们用一些例子来展示for 循环的基本使用方式。

package main

import "fmt"

func main() {

    i := 1
    for i <= 3 {
        fmt.Println(i)
        i = i + 1
    }

    for j := 7; j <= 9; j++ {
        fmt.Println(j)
    }

    for {
        fmt.Println("loop")
        break
    }

    for n := 0; n <= 5; n++ {
        if n%2 == 0 {
            continue
        }
        fmt.Println(n)
    }
}

输出为

1
2
3
7
8
9
loop
1
3
5

i := 1,然后for i <= 3加上想要运行的语句,这种是最基础的方式,单个循环条件。当然除了先定义再使用,我们还可以把这个过程融合在一起,比如使用for j := 7; j <= 9; j++ ;除此之外,我们还可以使用不用条件的for循环,这样的话会一直运行,直到在循环体内使用了 break 或者 return 跳出循环,同时我们也可以使用continue直接进入下一次循环。

If/Else 分支

if/else分支在任何编程语言中都非常常见,这里我们还是用例子来讲述它的用法:

package main

import "fmt"

func main() {

    if 7%2 == 0 {
        fmt.Println("7 is even")
    } else {
        fmt.Println("7 is odd")
    }

    if 8%4 == 0 {
        fmt.Println("8 is divisible by 4")
    }

    if num := 9; num < 0 {
        fmt.Println(num, "is negative")
    } else if num < 10 {
        fmt.Println(num, "has 1 digit")
    } else {
        fmt.Println(num, "has multiple digits")
    }
}

输出为:

7 is odd
8 is divisible by 4
9 has 1 digit

我们可以组合使用if/else,同样也可以只使用if。在每一个条件之前都可以有一个声明语句,我们在这里声明的变量可以在这个语句所有的条件分支中使用。值得注意的是,go语言中条件语句的圆括号不是必需的,但是花括号是必需的,同时go语言中是没有三目运算符的,因此即使是最基础的条件判断也需要完整的if语言,这样的规定让go代码相比其他编程语言要便于阅读许多。

Switch 分支结构

switch是多分支情况时快捷的条件语句,我们继续用例子来讲述用法。

package main

import (
    "fmt"
    "time"
)

func main() {

    i := 2
    fmt.Print("write ", i, " as ")
    switch i {
    case 1:
        fmt.Println("one")
    case 2:
        fmt.Println("two")
    case 3:
        fmt.Println("three")
    }

    switch time.Now().Weekday() {
    case time.Saturday, time.Sunday:
        fmt.Println("It's the weekend")
    default:
        fmt.Println("It's a weekday")
    }

    t := time.Now()
    switch {
    case t.Hour() < 12:
        fmt.Println("It's before noon")
    default:
        fmt.Println("It's after noon")
    }

    whatAmI := func(i interface{}) {
        switch t := i.(type) {
        case bool:
            fmt.Println("I'm a bool")
        case int:
            fmt.Println("I'm an int")
        default:
            fmt.Printf("Don't know type %T\n", t)
        }
    }
    whatAmI(true)
    whatAmI(1)
    whatAmI("hey")
}

输出为:

write 2 as two
It's the weekend
It's after noon
I'm a bool
I'm an int
Don't know type string

最基础的switch语句便是switch条件,然后case条件的形式,在同一个 case 语句中,我们还可以使用逗号来分隔多个表达式,比如第二个例子中我们可以使用case time.Saturday, time.Sunday:time.Now().Weekday()来作为条件。除此之外,我们还可以使用不带条件的switch的语句,这样的用法就类似if语句了,同时还可以不带常量。最后一个例子里我们使用了类型开关 (type switch) 比较类型而不是值,它可以用来发现一个接口值的类型,因此我们可以看到这里变量 t 在每个分支中会有相应的类型。

参考

Go by Example