一般用法与C语言类似,但是判断表达式不用加括号
var a int
if a < 4 {
a++
} else if a == 4 {
a--
} else {
a *= 2
}
在判断条件表达式前,可以加额外的语句
if b := a * 2; b < 10{
fmt.Println(b)
}
这样写的好处是对于块作用域,变量作用的范围更小
在Go中,switch case
语句的条件比C更加灵活方便,case值不局限于整数
var a int
switch a{
case 2:
fmt.Println(a)
case 3, 4, 5, 6, 7:
fmt.Println(a)
default:
fmt.Println(a)
}
Go中不需要用break
说明一个分支结束,如果多个分支使用同一处理,可以写在一个表达式中
还可以将多个if else
的结构写成swich
语句
var a int
switch {
case a < 10:
fmt.Println(a)
case a > 10 && a < 20, a > 50 && a < 60:
fmt.Println(a)
default:
fmt.Println(a)
}
Go中没有while
关键字,只有for
几种常用写法
var a int
//死循环
for {
a++
}
//判断条件循环
for a < 10 {
fmt.Println(a)
}
//固定次数循环
for i := 0; i < 10; i++ {
fmt.Println(i)
}
break
和continue
关键字功能与其他语言相同
goto
、return
、panic
语句也可以推出循环
对可迭代数据的循环,类似于C++的for( : )
,Python的for in
单个左值是索引,两个左值分别是索引和值
for index, value := range s {
fmt.Println(index, value)
}
单个左值是key,两个分别是key和value
var m = map[string]int{
"hello": 123,
"world": 321,
}
for key := range m {
fmt.Println(key)
}
for key, value := range m {
fmt.Println(key, value)
}
c := make(chan int)
for msg := range c{
fmt.Println(msg)
}
从通道中不断获取数据
使用标签标记代码块,再配合使用goto
、break
、continue
进行跳转
loop:
for {
for{
break loop
}
fmt.Println("outer loop")
}
fmt.Println("outside")
//结果只打印 outside
使用break label,直接跳出两层循环
loop:
for {
fmt.Println("outer loop")
for{
continue loop
}
}
//结果一直打印 outer loop
使用continue label,回到外层循环开头
break和continue后面接label只能接定义在for
、switch
、select
代码块前一行的lebel
goto是无条件跳转,可以跳转到任意label,高级语言中不推荐使用
for {
for {
goto exit
}
}
exit:
fmt.Println("outside")
《Go语言从入门到进阶实战》第四章