golang 程序控制流程

if else

分为 

单分支

if 条件表达式{

        执行代码

}

双分支

if 条件表达式{

        执行代码

}else{

        执行代码

}

多分支

if 条件表达式{

        执行代码

}else if 表达条件{

        执行代码

}else if 表达条件{

        执行代码

}

swhitch

func main(){
	fmt.Println("请输入 今天星期几")
	var zhou string
	fmt.Scanf("%v",&zhou)
	switch zhou{
	case "星期一":
		fmt.Println("红烧鱼")
	case "星期二":
		fmt.Println("红烧鸡爪")
	case "星期三":
		fmt.Println("红烧兔子")
	case "星期四":
		fmt.Println("红烧猪头")
	default:
		fmt.Println("输出错误")
	}

swhitch细节

case内的值不能重复 

比如 

var i int = 10

var j int = 10

for i {

        case 10:

        fmt.Println("ok")

       case j:

        fmt.Println("ok1")

default:

  fmt.Println("报错")

}

//他会输出 ok 因为他会先进入 第一个 case进行判断 判断成功直接出来 

如果第一个 case和第二个 都是 10的话 会直接报错

switch中的穿透 fallthrough

什么是穿透 呢 

var num int = 10
	switch num {
		case 10:
			fmt.Println("ok1")
			fallthrough
		case 20:
			fmt.Println("ok2")
		case 30:
			fmt.Println("ok3")
		default:
			fmt.Println("匹配")
	}

就像代码段里的mun等于 10 不添加穿透的话 输出的是 ok1

但是case 10 下面加了 fallthrough

就会把 ok1 和下面的 ok2  一起输出  当然 只有 case 10判断成功了 加了fallthrough才会输出 case 20 

如果case判断不成功 当然fallthrough就不会生效

for循环 

func main(){
	// var i int 
	// var j =1
	// for  i= 1;  ;i++ {
	// 	j +=j
	// 	fmt.Println(j)
	// }
	// fmt.Println(i)
	//for 循环的第三种写法
	var k int = 1
	for{
		if k<= 10{
			fmt.Println("ok")
		}else{
			break
		}
		k++
	}
	var str  = "abcdefg"
	for a,b :=range str{
		fmt.Printf("a=%d b =%c\n",a,b)
	}

输出字符串是以

for 数组变量 ,数组对应字符变量 :=range  字符串变量 {

        xxxx

}

进行输出的 、

想要输出汉字需要使用[]]rune(str)

var str  = []rune("abcdefg王启龙")
	//正常情况下 汉字占用 三个位置 想要输出 汉字 需要使用 切片 []rune()   切片进行强制转换
	//或者使用新的函数 进行赋值 i = []]rune(str)

	for a,b :=range str{
		fmt.Printf("a=%d b =%c\n",a,b)
	}

for循环中 实现 do while

for循环中有个break

作用是 跳出for循环 

break 跳出 for或者 跳出 switch 

n1:  //生成 一个冒号结束的 标签 然后 下面 break 引用这个 函数 
	//使break直接 跳出 第一个 for循环 因为 定义的 那个标签是在 第一个 for循环外面的
	for i := 1;i<= 4;i++{
		for j :=1 ;j<=4; j++{
			if j==3 {
				break n1
			}
			fmt.Println("j=",j)
		}
		
	}

上面定义 的 n1:标签

作用是 绑定下面第一个 for循环 下面的 break直接 操作 结束 第一个 for循环

跳转控制语句 continue

结束本次循环 并不是 像 break一样直接 跳出 循环

for i :=1;i<=4;i++{
		for j:=1;j<=4;j++{
			if j==3{
				continue 
			}
			//fmt.Println("i=",i)
			fmt.Println("j-=",j)
		}
		
	}

输出结果是 四遍 1 2 4 

不输出3

练习

使用 for循环 continue break 

输出一个数 判断是正数还是负数 最后输出 输出的所有数的正数负数各多少 输入0结束

var fInt int //接收正数
	var zInt int //接受负数
	var num int //输入值
	for {
		fmt.Println("请输入一个整数 0退出程序")
		fmt.Scanln(&num)//接收整数
		if num == 0{
			break
			//判断输入0break退出程序
		}
		if num >0 {
			zInt++
			continue
			//判断为正数退出本次循环 
		}else{
			fInt++
			//为负数负数+1
		}

	}
	fmt.Printf("正数个数为%v 负数个数为%v",zInt,fInt)

// 携带100000元 过告诉需要交高速费

    // 当钱大于50000时 每次交现有钱的百分之五

    // 当小于等于50000时 每次交一千

    // 算出一共交了多少次高速费

var money float32 =100000
	var num int 
	for {
		if money <1000{
			break
			//小于1000钱不够了 退出
		}
		if money >50000{
			money-=money*0.05//总钱数-=百分之五
			num++
			
		}else{
			money-=1000//总钱数-=1000
			num++
		}
	}
	fmt.Println(num)

算法 冒泡排序 

使用 冒泡排序对一个数组 进行排序 

func main (){
	//[14]int 里面的14的意思是这个数组一共十四位 多的就会用0代替 少的会报错
	var num = [14]int {45,454,6456,484,54854,54,8,4,4456,46,46,46,46,46,}
	for i :=0 ;i<len(num)-1;i++{//因为数组第一位是从0计算 所以从0到13刚好14位 所以 num长度-1
		for j :=0 ;j<len(num)-1-i;j++{//外层循环走一次 内层循环走一圈 所以第一次判断就把最大或者最小的数排到最后面 所以需要减去i
			if num[j]>num[j+1]{
				num[j],num[j+1] = num[j+1],num[j]
			}
		}
	}
	fmt.Println("排序后的num=",num)
}

goto的使用 

goto一般不建议使用 他会打乱 代码的正常运行 除非破不得已 

func main(){
	var n int = 10
	fmt.Println("123")
	if n==10{
		goto n1//goto一般配合if语句进行使用
	}
	
	fmt.Println("456")
	fmt.Println("789")
	fmt.Println("000")
	//条件成立 会直接 跳到 n1下面的 111 输出结果就是 123 111
	n1:
	fmt.Println("111")
}

return 

return是直接跳出整个函数 项目一般会有很多个函数 

return直接 跳出当前函数 

如果return在main函数内 就是i直接 退出该程序 //main函数是整个程序的入口

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值