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

86 阅读2分钟

这是我参与「第五届青训营 」笔记创作活动的第2天

基础语法

switch

Go语言中的switch分支结构看起来也和C/C++类似。switch后面的变量名同样的不需要括号。这里有一个很大的不同点,C++中switch case不加break的话,会跑完所有的case分支,在Go中是默认不需要加的。

a := 2
switch a {
case 1:
    fmt.Println("one")
case 2:
    fmt.Println("two")
case 3:
    fmt.Println("three")
case 4, 5:
    fmt.Println("four or five")
default:
    fmt.Println("other")
}

相比C/C++,Go中的switch功能更加强大,可以使用任意的变量类型,比如字符串,结构体等,甚至可以取代任意的if else语句。你可以在switch后面不加任意的变量,然后在每个case里写条件分支。这样的代码相比你用多个if else嵌套更加清晰易懂。

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

循环

在Go语言中只有唯一的for循环,没有while, do while之类的。 下面是最简单的循环

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

不加break就会变成死循环了,注意一下。

下面是很熟悉的类似C语言的循环,会输出7 8。

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

可以使用continue继续循环,用break跳出循环,这点和别的语言很像。

数组

下面是声明一个固定长度的数组

var a [5]int
a[4] = 100
fmt.Println(a[4], len(a))

也可以用:=进行声明

b := [5]int{1, 2, 3, 4, 5}
fmt.Println(b)

多维的数组也是可以的

var twoD [2][3]int
for i := 0; i < 2; i++ {
    for j := 0; j < 3; j++ {
        towD[i][j] = i + j
    }
}
fmt.Println("2d: ", towD)

如果我们访问了一个超过数组长度的索引,编译器会给我们返回编译错误,这点和别的语言也很像。 在正式的业务代码里我们很少使用数组,因为它的长度是固定的,我们更多的时候是的用切片。