注:本人已有C,C++,Python基础,只写本人认为的重点。
程序有三大结构:顺序,分支,循环。顺序不用说,分支虽然语法和C类似,但还是有一些不同的地方。
首先要强调无论是分支还是循环结构,都有如下规则:
1.单个执行语句也要加大括号
2.条件表达式中可以定义变量,但只能使用省略var的自动推导,而且定义变量后必须跟分号,后面会有例子。
一、if else
语法如下:
if 条件1{
//语句1
}else if 条件2{
//语句2
}…
else if 条件n-1{
//语句n-1
}else{
//语句n
}
注意:
1.else和else if必须跟在右大括号后面,不能写在行首
2.条件表达式中可以定义变量,如下:
if age := 20; age > 18 {
fmt.Println("你已成年")
}
二、switch
语法如下:
switch 表达式{
case 表达式1,表达式2,…:
语句块1
case 表达式3,表达式4,…:
语句块2
…
default:
语句块n
}
一些细节:
1.case/switch后的表达式可以是常量,变量和有返回值的函数
2.case的表达式之间是或的关系,即只要有一个表达式成立,就执行语句块。
3.case中的表达式之间和case之间的表达式都不能重复,比如case 1:…;case 1,2:…;这样是错的。
4.switch后面可以不跟表达式,当作if else分支来处理,比如:
var age int = 10
switch {
case age == 10:
fmt.Println("age == 10")
case age == 20:
fmt.Println("age == 20")
default:
fmt.Println("没有匹配到")
}
go专属switch机制:
1.switch穿透,fallthrough:fallthrough用于使当前case执行完后还能继续执行下一个case,必须放在case末尾,例:
var num int = 10
switch num {
case 10:
fmt.Println("ok1")
fallthrough //默认只能穿透一层
case 20:
fmt.Println("ok2")
fallthrough
case 30:
fmt.Println("ok3")
default:
fmt.Println("没有匹配到..")
}
注意:fallthrough必须放case末尾且只能有一个,只能穿透一层。
2.type swich,类型推断:switch语句还可以被用于来判断某个 interface 变量中实际指向的变量类型:
package main
import "fmt"
func main() {
var x interface{}
var y = 10.0
x = y
switch i := x.(type) {
case nil:
fmt.Printf("x的类型:%T", i)
case int:
fmt.Printf("x是int型")
case func(int) float64:
fmt.Printf("x是func(int)型")
case bool, string, float64:
fmt.Printf("x是bool,float64或string型")
default:
fmt.Printf("x类型未知")
}
}
其中涉及的知识点不用管,只需记住这个语法。