zoukankan      html  css  js  c++  java
  • Golang语言学习笔记(五)

    Golang中的流程控制

    流程控制是每种编程语言控制逻辑走向和执行次序的重要部分,流程控制可以说是一门语言的“经脉”
    Go语言中最常用的流程控制有if和for,而switch和goto主要是为了简化代码、降低重复代码而生的结构,属于扩展类的流程控制

    1.if else(分支结构)

    if 表达式1 {
        分支1
    }else if 表达式2 {
        分支2
    }else {
        分支3
    }
    

    2.for循环语句

    for 初始语句;条件表达式;结束语句{
        循环体语句
    }
    

    3.for range循环

    for 键,值 := range 被循环的变量 {
     	循环体语句
    }
    

    4.switch case语句

    使用switch语句可方便的对大量的值进行条件判断

        switch 表达式 {
        case condition :
            分支1
            break
        default :
            分支2
          }
    

    switch的穿透语句 fallthrough

    fallthrough语法可以执行满足条件的case的下一个case,是为了兼容C语言中的case设计的

    5.break

    Go语言中break用于以下几个方面:
        *用于循环语句中跳出循环,并开始执行循环之后的语句
        *break在switch(开关语句)中在执行一条case后跳出语句的作用
        *在多重循环中,可以用标号label标出想break的循环
    

    6.continue

    continue语句可以结束当前循环,开始下一次的循环迭代过程,仅限在for循环内使用

    7.goto

    goto语句通过标签进行代码间的无条件跳转,goto语句可以在快速跳出循环、避免重复退出上有一定的帮助。Go语言中使用goto语句能简化一些代码的实现过程

    代码:
    demo10/main.go

    package main
    
    import (
    	"fmt"
    )
    
    func main() {
    	/*
    		Go语言中if条件判断的格式如下:
    		if 表达式1 {
    			分支1
    		}else if 表达式2 {
    			分支2
    		}else {
    			分支3
    		}
    	*/
    
    	//1.最简单的if语句
    	// flag := true
    
    	// if flag {
    	// 	fmt.Println("flag=true")//flag=true
    	// }
    
    	// age := 30
    	// if age > 18 {
    	// 	fmt.Println("成年人")
    	// }
    
    	//2.if语句的另一种写法
    
    	// if age := 30; age > 20 {
    	// 	fmt.Println("成年人")
    	// }
    
    	//第二种写法的age只是一个局部变量,if条件外部不可再使用age变量
    
    	//3.输入一个人的成绩,如果成绩大于90输出A,如果小于90小于75输出B,否则输出C
    
    	// var score = 76;
    
    	// if score >= 90 {
    	// 	fmt.Println("A")
    	// } else if score >= 75 {
    	// 	fmt.Println("B")
    	// } else {
    	// 	fmt.Println("C")
    	// }
    
    	/*
    		注意:
    		1.if 条件表达式()可以省略不写,但是{}不能省略
    		2.{必须紧挨着条件表达式,不可换行
    	*/
    
    	//4.求两个数的最大值
    	// var a = 34
    	// var b = 11
    
    	// var max int
    	// if a > b {
    	// 	max = a
    	// } else {
    	// 	max = b
    	// }
    	// fmt.Println("a,b之间的最大值是:",max)//a,b之间的最大值是: 34
    
    	//5.for循环语句
    	/*
    		for 初始语句;条件表达式;结束语句{
    			循环体语句
    		}
    	*/
    
    	//1.打印1-10的所有数据
    	/*
    		for循环的执行流程:
    		1.i :=1
    		2.i <= 10
    		3.执行花括号里面的语句
    		4.i++    ------i=2
    		5.i<=10
    		6.执行花括号里面的语句
    		7.i++    ------i=3
    		8.i <= 10
    		.....
    		n.i++    ------i=10
    		n+1.i<=10
    		n+2.执行花括号里面的语句
    		n+3.i++    ------i=11
    		n+4.i<=10  ------不满足条件,循环结束
    	*/
    	// for i := 1; i <= 10; i++ {
    	// 	fmt.Println(i)
    	// }
    
    	//for循环的另一种写法, for循环的初始语句可以被忽略,但是初始语句后的分号必须要写
    	// i := 1
    	// for ; i <= 10; i++ {
    	// 	fmt.Println(i)
    	// }
    
    	//for循环的第三种写法, 写for循环的时候要注意死循环,for循环的初始语句和结束语句都可以省略
    	// i := 1
    	// for ; i <= 10;  {
    	// 	fmt.Println(i)
    	// 	i++
    	// }
    
    	/*
    		无限循环
    		for {
    			循环体语句
    		}
    		注意:Go语言中没有while语句,可以通过for代替
    	*/
    
    	// i := 1
    	// for {
    	// 	if i <= 10 {
    	// 		fmt.Println(i)
    	// 	} else {
    	// 		break //跳出循环
    	// 	}
    	// 	i++
    	// }
    
    	//----------------练习------------
    	//1.打印0-50的所有偶数
    	// for i :=0; i <= 50; i++ {
    	// 	if i%2 ==0 {
    	// 		fmt.Println(i)
    	// 	}
    	// }
    	//2.求1+2+3+4+...100的和
    	// sum := 0
    	// for i := 1; i <= 100; i++ {
    	// 	sum += i
    	// }
    	// fmt.Println(sum)//5050
    	//3.打印1~100之间所有是9的倍数的整数的个数及总和
    	// sum := 0
    	// count := 0
    	// for i := 1; i <= 100; i++ {
    	// 	if i%9 == 0 {
    	// 		count ++
    	// 		sum += i
    	// 	}
    	// }
    	// fmt.Printf("count is %v, sum = %v",count,sum)//count is 11, sum = 594
    	//4.计算5的阶乘(5*4*3*2*1)
    	// sum := 1
    	// for i := 1; i <= 5; i++ {
    	// 	sum *= i
    	// }
    	// fmt.Println(sum)
    
    	//5.打印一个矩形,for循环的嵌套
    	/*
    	**********
    	**********
    	**********
    	 */
    
    	//一个for循环实现
    	// for i := 1; i <= 30; i++ {
    	// 	fmt.Print("*")
    	// 	if i%10 == 0 {
    	// 		fmt.Println()
    	// 	}
    	// }
    
    	//嵌套循环,扩展性更强
    	// for i := 0; i < 3; i++ {
    	// 	for j := 0; j < 10; j++ {
    	// 		fmt.Print("*")
    	// 	}
    	// 	fmt.Println()
    	// }
    
    	//6.打印一个三角形
    	// row := 5
    	// for i := 0; i < row; i++ {
    	// 	for j :=0; j <= i; j++ {
    	// 		fmt.Print("*")
    	// 	}
    	// 	fmt.Println()
    	// }
    
    	//7.打印九九乘法表
    	// for i := 1; i <= 9; i++ {
    	// 	for j :=1; j <= i; j++ {
    	// 		fmt.Printf("%vx%v=%v	",j,i,i*j)
    	// 	}
    	// 	fmt.Println()
    	// }
    
    	//for range
    
    	// var str = "你好Golang"
    
    	// for k,v := range str {
    	// 	fmt.Printf("key=%v value=%c
    ",k,v)
    	// }
    
    	/*
    		输出为:
    		key=0 value=你
    		key=3 value=好
    		key=6 value=G
    		key=7 value=o
    		key=8 value=l
    		key=9 value=a
    		key=10 value=n
    		key=11 value=g
    	*/
    
    	// var arr =[]string{"php","java","js","golang"}
    	// for i := 0; i < len(arr); i++ {
    	// 	fmt.Println(arr[i])
    	// }
    
    	// for _,val := range arr {
    	// 	fmt.Println(val)
    	// }
    
    	//switch case
    	/*
    				switch 表达式 {
    		        case condition :
    		            分支1
    		            break
    		        default :
    		            分支2
    		    	}
    	*/
    	//判断文件类型,如果后缀名是.html,输出text/html,如果后缀名是.css,输出text/css,如果后缀名是.js,输出text/javascript.
    	// var ext = ".html"
    
    	// if ext == ".html" {
    	// 	fmt.Println("text/html")
    	// } else if ext == ".css" {
    	// 	fmt.Println("text/css")
    	// } else if ext == ".js" {
    	// 	fmt.Println("text/javascript")
    	// } else {
    	// 	fmt.Println("找不到匹配的后缀名")
    	// }
    
    	//switch case的基本使用
    	// var extname = ".html"
    	// switch extname {
    	// case ".html":
    	// 	fmt.Println("text/html")
    	// 	break
    	// case ".css":
    	// 	fmt.Println("text/css")
    	// 	break
    	// case ".js":
    	// 	fmt.Println("text/javascript")
    	// 	break
    	// default :
    	// 	fmt.Println("找不到匹配的后缀名")
    	// }
    
    	//也可以将初始语句放在switch之后,这样变量就是一个局部变量,只在switch语句中有效
    	// switch extname := ".html"; extname {
    	// case ".html":
    	// 	fmt.Println("text/html")
    	// 	break
    	// case ".css":
    	// 	fmt.Println("text/css")
    	// 	break
    	// case ".js":
    	// 	fmt.Println("text/javascript")
    	// 	break
    	// default :
    	// 	fmt.Println("找不到匹配的后缀名")
    	// }
    
    	//一个分支可以有多个值,多个case值中间使用英文逗号分隔
    
    	//判断一个数是奇数还是偶数
    	// var n = 5
    	// switch n {
    	// case 1, 3, 5, 7, 9:
    	// 	fmt.Println("奇数")
    	// 	break //golang中break可以写也可以不写,不写不会穿透
    	// case 2, 4, 6, 8, 10:
    	// 	fmt.Println("偶数")
    	// }
    
    	//ABC为及格,D为不及格
    	// var score = "A"
    	// switch score{
    	// case "A","B","C" :
    	// 		fmt.Println("及格")
    	// case "D" :
    	// 		fmt.Println("不及格")
    	// }
    
    	//分支还可以写表达式,这时候 switch语句后面不需要再跟判断变量
    
    	// var age = 30
    	// switch {
    	// case age < 24 :
    	// 	fmt.Println("好好学习")
    	// case age >= 24 && age <= 60  :
    	// 	fmt.Println("好好赚钱")
    	// case age > 60 :
    	// 	fmt.Println("注意身体")
    	// default :
    	// 	fmt.Println("输入错误")
    	// }
    
    	//switch的穿透 fallthrough, 只能穿透到相邻一层,多个fallthrough可以持续向下穿透
    	// var age = 30
    	// switch {
    	// case age < 24 :
    	// 	fmt.Println("好好学习")
    	// case age >= 24 && age <= 60  :
    	// 	fmt.Println("好好赚钱")
    	// 	fallthrough
    	// case age > 60 :
    	// 	fmt.Println("注意身体")
    	// default :
    	// 	fmt.Println("输入错误")
    	// }
    
    	//break(跳出循环)
    	/*
    		Go语言中break用于以下几个方面:
    			*用于循环语句中跳出循环,并开始执行循环之后的语句
    			*break在switch(开关语句)中在执行一条case后跳出语句的作用
    			*在多重循环中,可以用标号label标出想break的循环
    	*/
    
    	// for i := 1; i <= 10; i++ {
    	// 	if i == 2 {
    	// 		break//表示当i=2的时候跳出当前循环
    	// 	}
    	// 	fmt.Println(i)
    	// }
    	// fmt.Println("继续执行")
    
    	// for i := 0; i <= 2; i++ {
    	// 	for j := 0; j < 10; j++ {
    	// 		if j == 3 {
    	// 			break
    	// 		}
    	// 		fmt.Printf("i=%v j=%v
    ",i,j)
    	// 	}
    	// }
    	/*
    		输出结果为:
    		i=0 j=0
    		i=0 j=1
    		i=0 j=2
    		i=1 j=0
    		i=1 j=1
    		i=1 j=2
    		i=2 j=0
    		i=2 j=1
    		i=2 j=2
    	*/
    
    	//break在switch中在执行一条case后跳出语句的作用
    	// var extname = ".css"
    	// switch extname {
    	// case ".html":
    	// 	fmt.Println("text/html")
    	// 	break
    	// case ".css":
    	// 	fmt.Println("text/css")
    	// 	break
    	// case ".js":
    	// 	fmt.Println("text/javascript")
    	// 	break
    	// default :
    	// 	fmt.Println("找不到匹配的后缀名")
    	// }
    
    	//在多重循环中,可以用标号label标出想break的循环
    
    	// label1:
    	// 	for i := 0; i <= 2; i++ {
    	// 		for j := 0; j < 10; j++ {
    	// 			if j == 3 {
    	// 				break label1
    	// 			}
    	// 			fmt.Printf("i=%v j=%v
    ",i,j)
    	// 		}
    	// 	}
    	/*
    		输出结果为:
    		i=0 j=0
    		i=0 j=1
    		i=0 j=2
    	*/
    
    	//continue 语句可以结束当前循环,开始下一次的循环迭代过程,仅限在for循环内使用
    	// for i := 1; i <= 10; i++ {
    	// 	if i == 3 {
    	// 		continue
    	// 	}
    	// 	fmt.Println(i)
    	// }
    
    	//在continue语句后添加标签时,表示开始标签对应的循环
    	// for i := 1; i <= 10; i++ {
    	// 	for j := 1; j <= 10; j++ {
    	// 		if j == 3 {
    	// 			continue
    	// 		}
    	// 		fmt.Printf("i=%v j=%v
    ",i,j)
    	// 	}
    	// }
    
    	// label2:
    	// 	for i := 1; i <= 2; i++ {
    	// 		for j := 1; j <= 10; j++ {
    	// 			if j == 3 {
    	// 				continue label2
    	// 			}
    	// 			fmt.Printf("i=%v j=%v
    ",i,j)
    	// 		}
    	// 	}
    	/*
    		输出结果为:
    		i=1 j=1
    		i=1 j=2
    		i=2 j=1
    		i=2 j=2
    	*/
    
    	//goto(跳转到指定标签)
    	var n = 30
    	if n > 18 {
    		fmt.Println("成年人")
    		goto label3
    	}
    
    	fmt.Println("aaa")
    	fmt.Println("bbb")
    label3:
    	fmt.Println("ccc")
    	fmt.Println("ddd")
    
    	/*
    		输出结果为:
    		成年人
    		ccc
    		ddd
    	*/
    
    }
    
    
  • 相关阅读:
    小程序-scroll-view用法及属性
    微信小程序--后台交互/wx.request({})方法/渲染页面方法 解析
    设计模式-观察者模式
    设计模式-简单工厂模式
    设计模式-抽象工厂模式
    设计模式-工厂方法模式
    由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。如果应下载文件,请添加 MIME 映射
    处理程序“svc-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”
    CSS中设置height:100%无效的解决方案
    解决火狐中用JQUERY .removeAttr()无法去除元素属性的方法
  • 原文地址:https://www.cnblogs.com/hanajiang/p/13762621.html
Copyright © 2011-2022 走看看