这是我参加字节后端训练营的笔记,承接上文,这一篇继续写写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 在每个分支中会有相应的类型。