前端尝试转GO学习(第六天)
条件判断 if
根据情况不同,程序执行的分支不同。if 的语法结构,在编译器中表达式两侧可以写小括号,也可以省略。if 语法结构中所有表达式最终结果都是bool类型,true代表成立执行对应代码。
// 单独使用
if 表达式 {
}
if 单独使用
func main() {
score := 65
// 只影响到自己对应的代码块
if score >= 60 {
fmt.Println("及格")
}
}
if 表达式中声明变量,变量的使用范围仅限于在 if 中能够使用。
func main() {
if score := 60; score >= 60 {
fmt.Println("及格")
}
}
多个单独 if 使用时相互没有影响。
func main() {
score := 65
if score >= 60 {
fmt.Println("及格")
}
if score < 60 {
fmt.Println("不及格")
}
}
if ... else 结构
func main() {
score := 59
if score >= 60 {
fmt.Println("及格")
} else{
fmt.Println("不及格")
}
}
if 多重嵌套
if 每种结构都可以相互嵌套。理论讲 if 可以很多层嵌套。
func main() {
score := 77
if score >= 60 {
if score >= 60 && score < 70 {
fmt.Println("及格")
}
if score >= 70 && score < 80 {
fmt.Println("中等")
}
if score >= 80 && score < 90 {
fmt.Println("良好")
}
if score >= 90 && score <= 100 {
fmt.Println("优秀")
}
} else {
fmt.Println("不及格")
}
}
if ... else if .... else结构
当需要判断多个条件时使用这种结构,这个结构是一个整体。只要有一个条件成立后面的都不判断,立即结束。else可以没有。
func main() {
score := 77
if score >= 90 {
fmt.Println("优秀")
} else if score >= 80 {
fmt.Println("良好")
} else if score >= 70 {
fmt.Println("中等")
} else if score >= 60 {
fmt.Println("及格")
} else {
fmt.Println("不及格")
}
}
Tip:Go 没有三目运算符,所以不支持 ?: 形式的条件判断。
switch...case
if 之后只能是 bool 类型, 而 switch 可以是其他类型。但是 case 后面的数据必须和 switch 变量类型一致。 另外,case 是没有先后顺序的,只要符合条件就会进入。
go 中的 switch 没有 break 语句,每个 case 默认都带着 break 语句。
func main() {
score := 60
switch score {
case 90:
fmt.Println("优秀")
case 80:
fmt.Println("良好")
case 70:
fmt.Println("中等")
case 60:
fmt.Println("及格")
default:
fmt.Println("不及格")
}
fmt.Println("程序结束了")
}
程序执行的结果:
及格
程序结束了
尽管 case 语句后面没有 break 语句,switch 也跳出了当前的控制流程。
fallthrough
fallthrough 语句的作用是强制执行 case 后面的没有执行的 case 代码。
只多向下执行一个 case,而不是执行整个 switch 语句。
func main() {
score := 70
switch score {
case 90:
fmt.Println("优秀")
case 80:
fmt.Println("良好")
case 70:
fmt.Println("中等")
fallthrough
case 60:
fmt.Println("及格")
default:
fmt.Println("不及格")
}
fmt.Println("程序结束了")
}
for循环
for 循环是Go语言中唯一一个循环结构。与其他语言不同的是,Go 语言是没有 while 的。
for 表达式1; 表达式2; 表达式3{
// 循环体
}
for 循环用的最多的地方就是遍历数组或切片等。for关键字后面有三个表达式,每个表达式都可以省略。
for i := 0; i < 5; i++ {
fmt.Println(i)
}
// 等价于
j := 0
for ; j < 5; {
fmt.Println(j)
j++
}
for 循环时常与 range 结合使用。range 函数返回两个值,第一个是 index,第二个是 value。
func main() {
arr := [3]string{
"React",
"Vue",
"Go",
}
for i, value := range arr {
fmt.Println(i, value)
}
}