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
	*/

}

原文地址:https://www.cnblogs.com/hanajiang/p/13762621.html