这是我参与「第五届青训营 」笔记创作活动的第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)
如果我们访问了一个超过数组长度的索引,编译器会给我们返回编译错误,这点和别的语言也很像。 在正式的业务代码里我们很少使用数组,因为它的长度是固定的,我们更多的时候是的用切片。