前言
编程中,除去一些特定场景,我们使用得最多的应该就是条件语句和循环语句,它们可以帮助我们处理很多东西,今天就一起来学习一下go语言中的条件语句和循环语句吧
条件语句
条件语句很简单,如下面代码所示
// 普通的条件语句
i := 10
if i == 10 {
fmt.Printf("这是测试")
}else {
fmt.Printf("这是else")
}
switch语句
首先记住一点,go语言的switch语句自带break
i := 1
// 判断i
switch i {
case 10 : fmt.Printf("这是10")
// 这里是多匹配,1,2,3都可以
case 1,2,3 : fmt.Printf("这是1")
case 20 : fmt.Printf("这是20")
}
// 也可以写成这样
switch {
case i == 10 : fmt.Printf("这是10")
case i == 1 : fmt.Printf("这是1")
case i == 20 : fmt.Printf("这是20")
}
// case type
q := reflect.TypeOf(i)
switch q {
case int : fmt.Printf("这是10")
case string : fmt.Printf("这是1")
case bool : fmt.Printf("这是20")
}
// fallthrough关键字,会强制执行后面一个case
switch {
case i == 10 : fmt.Printf("这是10")
case i == 1 : fmt.Printf("这是1")
fallthrough
case i == 20 : fmt.Printf("这是20")
}
select语句
这个语句只能用于通道channel操作,读取或者写入
// 创建一个通道
test := make(chan bool)
go func() {
for {
select {
case <- test:
fmt.Println("test")
return
default:
fmt.Println("default")
}
}
}()
// 主线程在3秒后,向quit信道写入数据
time.Sleep(3 * time.Second)
test <- "test"
fmt.Println("end")
注意,这里是goroutine(相当于多线程),在case语句中一定要使用return,而不能使用break,break之后还在当前循环,而return是直接退出goroutine线程。
还有,一般select语句中不要使用default,因为select没有case到,会一直执行default语句,直到有一个case
循环语句
循环语句可以简单的理解为,满足条件,就继续执行循环体,不满足则退出,如下图所示
1、普通for循环
和java等语言一样,这是简单的for循环
// for 初始值;循环条件;变量赋值{循环体}
for i :=0;i<=10;i++{
fmt.Printf(strconv.Itoa(i))
}
// for 条件 {}
i := 0
for i<=10{
i++
}
go语言还有一种range的循环
// 数组循环
strings := []string{"test1", "test2"}
for i, s := range strings {
fmt.Println(i, s)
}
// map循环
map1 := make(map[int]float32)
map1[1] = 1.0
map1[2] = 2.0
map1[3] = 3.0
map1[4] = 4.0
// 读取 key 和 value
for key, value := range map1 {
fmt.Printf("key is: %d - value is: %f\n", key, value)
}
// 只读取 key,实际上相当于 key,_
for key := range map1 {
fmt.Printf("key is: %d\n", key)
}
// 只读取 value
for _, value := range map1 {
fmt.Printf("value is: %f\n", value)
}
2、死循环
// 也可以写成 var sum = 0 或者 var sum int = 0
sum := 0
for {
sum++
fmt.Printf(strconv.Itoa(sum))
}
3、关键字
break: 直接跳出当前循环(中断循环)
continue: 跳出本地循环,进行下一次循环
goto: 跳入指定位置
//这里就只讲解一下goto
// 变量
var i int = 10
// 循环
LOOP: for i < 20 {
if i == 15 {
//当i等于15时直接跳到LOOP
i++
goto LOOP
}
fmt.Printf("a的值为 : %d\n", i)
i++
}