if
package main
import "fmt"
func main() {
age := 18
if age >= 18 && age < 20 {
fmt.Println("成年了")
} else if age > 30 {
fmt.Println("30")
} else {
fmt.Print("666")
}
//此时age_1是局部变量
if age_1 := 20; age_1 >= 18 && age_1 < 20 {
fmt.Println("成年了")
} else if age > 30 {
fmt.Println("30")
} else {
fmt.Print("666")
}
}
普通for循环
break,continue可以正常使用
package main
import "fmt"
func main() {
for i := 1; i <= 10; i++ {
fmt.Println(i)
}
}
类似while循环的写法
for condition {
}
死循环
for {
}
switch
不用写break,
package main
import "fmt"
func main() {
var n int = 5
switch n {
case 1:
fmt.Println(1)
case 2:
fmt.Println(2)
default:
fmt.Println("defult")
}
}
另外的写法
switch n := 2; n
case 1, 2, 3:
可以在case里写表达式,但是此时switch后面不用跟变量
package main
import "fmt"
func main() {
var n int = 5
switch {
case n == 1:
fmt.Println(1)
// fallthrough关键字可以强制执行下一个case子句,注意是强制执行。
case n == 2:
fmt.Println(2)
default:
fmt.Println("defult")
}
}
break
普通写法
package main
import "fmt"
func main() {
for i := 0; i < 10; i++ {
if i >= 5 {
break
}
fmt.Println(i)
}
fmt.Println("end")
}
0
1
2
3
4
end
带标签的break
package main
import "fmt"
func main() {
MYLABEL:
for i := 0; i < 10; i++ {
if i >= 5 {
break MYLABEL
}
fmt.Println(i)
}
fmt.Println("end")
}
此时会跳出到MYLABEL标签处,并且不会继续执行for循环,而是直接输出了end(跳出标签所标识的for,switch,select语句的执行)
那么将标签写在for循环后面呢
package main
import "fmt"
func main() {
for i := 0; i < 10; i++ {
if i >= 5 {
break MYLABEL
}
fmt.Println(i)
}
fmt.Println("end")
MYLABEL:
fmt.Print("123")
这种写法编译会报错,看来break并不能像goto一样想去哪就去哪
continue
普通写法
package main
import "fmt"
func main() {
/* MYLABEL: */
for i := 0; i < 10; i++ {
if i == 5 {
continue
}
fmt.Println(i)
}
fmt.Println("end")
}
结果是输出0-4,6-9,end
标签
package main
import "fmt"
func main() {
for i := 0; i < 5; i++ {
MTLABEL:
for j := 0; j < 5; j++ {
if i == 2 && j == 2 {
continue MTLABEL
}
fmt.Printf("i: %v, j: %v\n", i, j)
}
}
fmt.Println("end")
}
不会打印出 2,2
一般在多层循环嵌套时,可以直接跳出多层循环