条件语句
和其他语言类似,条件语句即为 if ,if else 等。
具体有以下表达式:
a := 2
b := 3
if a > b {
fmt.Printf("具体操作1")
}
if a <= b {
fmt.Printf("具体操作2")
} else {
fmt.Printf("具体操作3")
}
// if 结构
if 布尔表达式 {
}
// if else 结构
if 布尔表达式 {
} else if 布尔表达式 {
} else {
}
if 常常用于判断一个err 是否为nil 来判断返回的错误值,比如:
// 判断读取一个文件是否出错
const fileName = "file.txt"
body, err := ioutil.ReadFile(fileName)
if err != nil{
fmt.Println(err)
}else{
fmt.Printf("%s\n",body)
}
选择语句
可能马上就会想到switch语句,没错,就是switch,它分为两种:表达式switch;类型switch
- 表达式switch
即对你表达式的结果为true或false来进行case下边语句的执行。
// 对学生的分数进行等级的判定
var grade int
grade = 80
switch {
case grade >= 80:
fmt.Println("成绩为A")
case grade >= 70:
fmt.Println("成绩为B")
case grade >= 60:
fmt.Println("成绩为C")
default:
fmt.Println("成绩为D")
}
- 类型switch
即对一个变量的值类型进行判断,是int32,还是int64等等。比如对一个接口类型其值所代表数据类型镜像判断,如下:
var value interface{}
value = 2
switch value.(type) {
case int:
fmt.Println("int 类型")
case int32:
fmt.Println("int32 类型")
case int64:
fmt.Println("int64 类型")
case int8:
fmt.Println("int8 类型")
case uint16:
fmt.Println("uint16 类型")
default:
fmt.Println("其他类型")
}
循环语句
golang中循环语句和其他语句差别不大,用的最多的是循环语句中的range子句,其作用类似于迭代器,可以用来遍历数组,切片中的每一个元素,也可以用来遍历字符串中的每一个字符,还可以用来遍历map中的每一个键值对。
- 正常使用
// 遍历数组
a := []string{"s", "t", "r", "i", "n", "g"}
for i := 0; i < len(a); i++ {
fmt.Printf("i = %d , %s\n", i, a[i])
}
- range 子句使用
// 遍历字符串
b := "string"
for k, v := range b {
fmt.Println("k:", k, ", v:", v)
}
// 遍历切片
var c []string
c = append(c, "y")
c = append(c, "o")
c = append(c, "u")
for k, v := range c {
fmt.Println("k:", k, ", v:", v)
}
// 遍历map
var m = make(map[string]int)
m["A"] = 65
m["B"] = 66
m["C"] = 67
for k, v := range m {
fmt.Println("k:", k, ", v:", v)
}