《Go语言入门到进阶实战》学习笔记:第四章 流程控制

主要介绍分支语句(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

 结束当前循环,开启下一次的外层循环,而不是内层循环。

猜你喜欢

转载自blog.csdn.net/qq_36214481/article/details/88757198