前言

流程控制顾名思义就是  控制程序执行流程的语句 for循环、if else判断 

 

一、if分支

package main

import (
	"fmt"
)

//if 条件判断
func main() {
	age := 19
	//if else 两个判断分支
	if age > 18 {
		fmt.Println("澳门首家线上赌场开业啦")
	} else {
		fmt.Println("该写暑假作业了")
	}
	//多个判断分支
	if age > 35 {
		fmt.Println("人到中年")
	} else if age > 18 || age < 100 {
		fmt.Println("青年")
	} else {
		fmt.Println("好好学习")
	}
	//多个判断条件
	var name = "张根"
	if name == "张根" && age == 19 {
		fmt.Println("你永远18岁")
	}

	//for循环
	for i := 0; i < 10; i++ {
		fmt.Println(i)
	}

}

 

if 条件循环语句 声明变量

Go的if条件分支里也可以声明变量,但是该变量只能在 if分支的作用域使用,这样也起到了节省内存的作用。

package main

import (
	"fmt"
)

//if 条件判断开辟作用域
func main() {
	if age := 19; age > 18 {
		fmt.Println("已经成年")
	}
	fmt.Println(age) //这里无法引用到age变量因为在if中声明的变量只能在if分支的作用域使用

}

  

switch语句  

使用switch语句简化 多个if条件判断

package main

import (
	"fmt"
)

//switch:简化大量的if分支
func main() {
	var n = 1
	if n == 1 {
		fmt.Println("大拇指")
	} else if n == 2 {
		fmt.Println("食指")
	} else if n == 3 {
		fmt.Println("中指")
	} else if n == 4 {
		fmt.Println("无名指")
	} else if n == 5 {
		fmt.Println("小拇指")
	} else {
		fmt.Println("无效的输入")
	}

	//使用 switch简化以上代码
	switch n = 3; n {
	case 1:
		fmt.Println("小拇指")
	case 2:
		fmt.Println("无名指")
	case 3:
		fmt.Println("中指")
	case 4:
		fmt.Println("事指")
	case 5:
		fmt.Println("大拇指")

	default: //默认分支
		fmt.Println("无效的输入")
	}

	//switch 中判断 奇数 偶数
	switch n := 8; n {
	case 1, 3, 5, 7, 9:
		fmt.Println("奇数")
	case 2, 4, 6, 8, 10:
		fmt.Println("偶数")
	default:
		fmt.Println("无效的数字")
	}

	//case 分支使用表示式
	age := 19
	switch {
	case age < 25:
		fmt.Println("好好学习")
	case age > 25 && age < 35:
		fmt.Println("好好工作吧")
	case age > 35 && age < 60:
		fmt.Println("好好享受生活把")
	default:
		fmt.Println("好好活着")

	}

	//fall through 下沉,语法执行满足1个case条件之后,再下沉1个case去判断(previouscase || next case)
	s := "a"
	switch {
	case s == "a":
		fmt.Println("a")
		fallthrough
	case s == "b":
		fmt.Println("b")
	}

	//既打印a 也打印 b

}

  

二、for循环

在go语言中for循环有4种形式

1.for 什么也不加

死循环就是for后面没有声明变量、条件表达式、累计算操作。

for{
    time.Sleep(time.Second*1)//等1秒再往下继续执行
  }

2.for+条件表达式;

go的for循环是每次执行完{ }里面的代码块,又回到for 表达式的位置 {},判断这个表达式是否仍然成立。

果表达式仍然成立,继续进入for循环,否则退出for循环!

var number int8
for number < 10 {
   time.Sleep(time.Second * 1) //等1秒再往下继续执行
   fmt.Println("红鲤鱼与绿鲤鱼与驴")
   number ++
       }

3.for+声明变量;+条件表达式;

for循环开始时会声明1个变量i:=0;然后判断i<10;进入for循环代码块{}

执行完了for循环代码块{}中的内容,会回到i<10;再次判断,然后再次进入for循环代码块{}

这种方式简化了以上在for循环代码块{}里面声明变量并操作的步骤

注意这种方式声明的i,在for循环作用域外面是,获取不到的。

for i:=0;i<10;{
    i++
    fmt.Println("您好")
    }

4.for+声明变量;+条件表达式;+累计计算;

设置i的初始值为0,当i小于10时,每次循环i+1

for i:=10;i>0;i-=2{
    fmt.Println("您好")
    }
 
 
5.for循环设置标签
Go语言比较特殊的地方是我们可以对Go的for循环设置1个标签,然后在内层循环中使用continue、break 该标签,可以到达影响外层循环的效果。
f1:
   for i := 1; i < 3; i++ {
    for j := 1; j < 5; j++ {
        f j == 3 {
        continue f1
            }
        fmt.Println(i, j)
        }
    }
}

 

break指定循环

f1: //对外层for循环,进行标记。
    for i := 1; i < 3; i++ {
        for j := 1; j < 5; j++ {
            if j == 3 {
                //使用标签break 外层循环
                break f1
            }
            fmt.Println(i, j)
        }
    }

 

6.goto语法

goto语句可以跳跃(go to)到指定的代码行,然后向下执行代码。 

package main

import "fmt"

func main() {
    var name string
    fmt.Print("请输入用户名:")
    fmt.Scan(&name)
    if name == "VIP" {
        goto VIP     //跳跃到VIP代码块,开始执行
    } else if name == "SVIP" {
        goto SVIP   //跳跃到SVIP代码块,开始执行
    } else {         //跳跃到Ordinary代码块,开始执行
        goto Ordinary
    }
Ordinary:
    fmt.Println("预约......")
VIP:
    fmt.Println("等号........")
SVIP:
    fmt.Println("进入........")
}

 

三、for循环练习

package main

import (
	"fmt"
)

func main() {
	//变种1
	var i = 5
	for ; i < 10; i++ {
		fmt.Println(i)
	}
	//变种2
	for i := 7; i < 10; i++ {
		fmt.Println(i)
	}
	//变种3
	var j = 9
	for j < 10 {
		fmt.Println(i)
		j++
	}
}

 

for rang键值对循环

package main

import (
	"fmt"
)

func main() {

	//键值对循环 for range
	var str1 = "张根"
	for i, v := range str1 {
		fmt.Printf("索引:%d 值:%c\n", i, v)

	}

}

 

break 和 continue

package main

import (
	"fmt"
)

func main() {
	//当i=5时跳出for循环
	for i := 0; i < 10; i++ {
		if i == 5 {
			break //break跳出for循环
		}
		fmt.Println(i)
	}
	//当i=5是忽略本次循环
	for i := 0; i < 9; i++ {
		if i == 5 {
			continue
		}
		fmt.Println(i)

	}
}

 

break and continue代码跳转

package main

import (
	"fmt"
)

func ContinueDemo() {
forloop1:
	for i := 0; i < 5; i++ {
		// forloop2:
		for j := 0; j < 5; j++ {
			if i == 2 && j == 2 {
				continue forloop1
			}
			fmt.Printf("%v-%v\n", i, j)
		}
	}
}

func BreakDemo() {
break1:
	for i := 0; i < 10; i++ {
		for j := 0; j < 10; j++ {
			if j == 2 {
				break break1
			}
			fmt.Printf("%v-%v\n", i, j)
		}
	}
	fmt.Println("结束")
}

func main() {
	BreakDemo()
	ContinueDemo()
}

  

 

  

Go打印乘法表

package main

import (
	"fmt"
)

//打印乘法表
func main() {
	for i := 1; i < 10; i++ {
		for j := 1; j < i; j++ {
			fmt.Printf("%d*%d=%d\t", j, i, j*i)
		}
		fmt.Println()
	}

}

 

Goto 跳出多层for循环

package main

import (
	"fmt"
)

//跳出多层for循环
func main() {
	//设置标志位
	var flag = false
	for i := 0; i < 10; i++ {
		for j := 'A'; j < 'Z'; j++ {
			if j == 'C' {
				flag = true
				break //跳出内层循环
			}
			fmt.Printf("%v-%c\n", i, j)

		}
		if flag {
			break //跳出外层循环
		}

	}

	//使用go to语句跳出多层for循环
	for i1 := 0; i1 < 10; i1++ {
		for j1 := 'a'; j1 < 'z'; j1++ {
			if j1 == 'c' {
				goto lable1 //goto 直接跳到定义lable1的位置执行
			}
			fmt.Printf("%v-%c\n", i1, j1)

		}

	}
lable1: //定义1个 lable
	fmt.Println("结束了")

}

  

 

 

 

 

参考

posted on 2020-03-21 10:03  Martin8866  阅读(204)  评论(0编辑  收藏  举报