主要介绍分支语句(if和switch)、循环(for)和跳转(goto)语句。另外还有循环控制语句(break和continue)。
4.1条件判断(if)
格式
if 表达式1{
分支1
}else if 表达式2{
分支2
}else{
分支3
}
var ten int = 11
if ten>10{
fmt.Println(">10")
}else{
fmt.Println("<=10")
}
4.2构建循环
for循环格式
for 初始语句;条件表达式;结束语句{
循环体代码
}
1、无限循环
var i int
for{
if i>10{
break
}
i++
}
2、只有一个循环条件的循环
var i int
for i<=10{
i++
}
4.3九九乘法表
//遍历决定处理第几行
for i:=1;i<10;i++{
//遍历决定处理第几列
for j:=1;j<=i;j++{
fmt.Printf("%d * %d = %d ",j,i,i*j)
}
fmt.Println()
}
4.4键值循环(for range)--直接获得对象的索引和数据
1、遍历数组、切片--获得索引和元素
for key,value := range []int{1,2,3,4}{
fmt.Printf("key:%d value:%d\n",key,value)
}
2、遍历字符串--获得字符
var str = "hello你好"
for key,value:=range str{
//代码中value实际类型是rune,实际上就是int32,以十六进制打印就是字符的编码
fmt.Printf("key:%d value:0x%x\n",key,value)
}
3、遍历map--获取map的键和值
m:=map[string]int{
"hello":100,
"world":200,
}
for key,value:=range m{
fmt.Println(key,value)
}
4、遍历通道(channel)--接收通道数据
c:=make(chan int)
//启动一个goroutine
go func(){
c<-1
c<-2
c<-3
close(c)
}()
for v:=range c{
fmt.Println(v)
}
5、在遍历中选择希望获得的变量
m:=map[string]int{
"hello":100,
"world":200,
}
//_是匿名变量
for _,value:=range m{
fmt.Println(value)
}
for key,_:=range m{
fmt.Println(key)
}
4.5分支选择(switch)--拥有多个条件分支的判断
1、基本写法
var a="hello"
switch a{
case "hello":
fmt.Println(1)
case "world":
fmt.Println(2)
default:
fmt.Println(0)
}
(1)一分支多值
var a = "mum"
switch a{
case "mum","daddy":
fmt.Println("family")
}
(2)分支表达式
var r int = 11
//注意,这种情况switch后边不再跟判断变量
switch{
case r>10&&r<20:
fmt.Println(r)
}
2、跨越case的fallthrough--兼容C语言的case设计
Go中case是独立的代码块,执行完毕后不会像C一样紧接着执行下一个case。为了兼容一些移植代码,依然加入fallthrough关键字来实现这一功能。
var s = "hello"
switch{
case s=="hello":
fmt.Println("hello")
fallthrouth
case s!="world"
fmt.Println("world")
}
输出:
hello
world
新编写代码,不建议使用fallthrouth
4.6跳转到指定代码标签(goto)
goto语句可以在快速跳出循环、避免重复退出上有一定帮助。
1、使用goto退出多层循环
func main() {
for x:=0;x<10 ;x++ {
for y:=0;y<10 ;y++ {
if y==2{
goto break_Here
}
}
}
//手动返回,避免执行进入标签
return
break_Here:
fmt.Println("done")
}
2、统一错误处理
4.7跳出指定循环(break)--可以跳出多层循环
break可以结束for、switch和select代码块。
func main() {
Outer_loop:
for i:=0;i<2 ;i++ {
for j:=0;j<5 ;j++ {
switch j {
case 2:
fmt.Println(i,j)
break Outer_loop
case 3:
fmt.Println(i,j)
break Outer_loop
}
}
}
}
4.8继续下一次循环(continue)
continue语句可以结束当前循环,开始下一次的循环迭代过程,仅限for循环中使用。在continue语句后添加标签时,表示开始标签对应的循环。
func main() {
Outer_loop:
for i:=0;i<2 ;i++ {
for j:=0;j<5 ;j++ {
switch j {
case 2:
fmt.Println(i,j)
continue Outer_loop
case 3:
fmt.Println(i,j)
continue Outer_loop
}
}
}
}
代码结果
0 2
1 2
结束当前循环,开启下一次的外层循环,而不是内层循环。