golang学习笔记系列之流程控制

流程控制

go语言中的条件

条件语句是用来判断给定的条件是否满足,并根据判断的结果决定执行的语句,go语言中的条件语句也是这样的。

go语言中的条件语句

  1. if语句:if语句由一个布尔表达式后紧跟一个或多个语句组成。
  2. if…else语句:if语句后可以使用可选的else语句,else语句中的表达式在布尔表达式为false时执行。
  3. if嵌套语句
  4. switch语句:switch语句用于基于不同条件执行不同的动作。
  5. select语句:select语句类似于switch语句,但是select会随机执行一个可运行的case,如果没有case可运行,它将阻塞,直到有case可运行。
if语句

语法

if 布尔表达式{
    /*布尔表达式为true时要执行的语句*/
}

注意:在go语言中,布尔表达式不需要使用括号。

//示例
a := 100
	if a > 10 {
		fmt.Println("hello")
	}

运行结果

hello

初始变量可以声明在布尔表达式里面,但是这个变量的作用于只能用在当前条件语句中!

//示例
	if b := 100; b > 10 {
		fmt.Println("if条件成立!")
		fmt.Printf("b: %v\n", b)
	} else {
		fmt.Println("if条件不成立!")
		fmt.Printf("b: %v\n", b)
	}

运行结果

if条件成立!
b: 100
if b := 100; b > 10 {
		fmt.Println("if条件成立!")
		fmt.Printf("b: %v\n", b)
	} else {
		fmt.Println("if条件不成立!")
		fmt.Printf("b: %v\n", b)
	}
	fmt.Printf("b: %v\n", b)

运行结果

19:24: undefined: b

go语言if语句使用提示:

  1. 不能使用布尔类型以外的其他值作为判断条件
  2. 不能使用括号将条件语句括起来
  3. 大括号必须存在,即使只有一行语句
  4. 左括号必须于if,else同一行
  5. 在if之后,条件语句之前,可以添加变量初始化语句,使用分号;分割
if else语句

语法

if 布尔表达式{
    /*布尔表达式为true时要执行的语句*/
}else{
    /*布尔表达式为false时要执行的语句*/
}
//示例
if age := 18; age > 18 {
		fmt.Println("你已经成年了!")
	} else {
		fmt.Println("你还未成年!")
	}

运行结果

你还未成年!
if else if语句

语法

if 布尔表达式1{
    /*布尔表达式1为true时要执行的语句*/
}else if 布尔表达式2{
    /*布尔表达式2为true时要执行的语句*/
}else{
    /*以上所有布尔表达式都不成立时要执行的语句*/
}
//示例
var aa int
	fmt.Println("请输入一个数:")
	fmt.Scan(&aa)
	if aa == 100 {
		fmt.Printf("aa: %v\n", aa)
	} else if aa < 100 {
		fmt.Println("太小了!")
	} else {
		fmt.Println("太大了!")
	}

请输入一个数:
10
太小了!
switch语句
单值匹配

语法

//单值匹配
switch 条件表达式{
    case var1:
    	...
    case var2:
    	...
    case var3:
    	...
    default:
    	...
}

//示例
	aaa := 1
	switch aaa {
	case 1:
		fmt.Println("唱歌!")
	case 2:
		fmt.Println("跳舞!")
	case 3:
		fmt.Println("唱歌+跳舞!")
	default:
		fmt.Println("才艺表演。")
	}

运行结果

唱歌!
多值匹配

语法

//多值匹配
switch 条件表达式{
    case var1,var2,var3...:
    	...
    case var4,var5...:
    	...
    default:
    	...
}
//示例
var day int
	fmt.Println("请输入一个数字:")
	fmt.Scan(&day)
	switch day {
	case 1, 2, 3, 4, 5:
		fmt.Println("工作日!")
	case 6, 7:
		fmt.Println("假期!")
	default:
		fmt.Println("输入有误!")
	}

运行结果

请输入一个数字:
6
假期!
case后接条件表达式

语法

//case后接条件表达式
switch{
    case 条件表达式1:
    	...
    case 条件表达式2:
    	...
    case 条件表达式3:
    	...
    default:
    	...
}
//示例
	var n int
	fmt.Println("请输入一个数字:")
	fmt.Scan(&n)
	switch {
	case n == 10:
		fmt.Println("猜对了!")
	case n < 10:
		fmt.Println("太小了!")
	case n > 10:
		fmt.Println("太大了!")
	default:
		fmt.Println("不可能执行到这条语句,除非上面的case都不成立。")
	}

运行结果

请输入一个数字:
23
太大了!
fallthrough

语法

//fallthrough 可以执行满足条件的下一个case
switch 条件表达式{
    case var1:
    	...
    	fallthrough
    case var2:
    	...
    	fallthrough
    case var3:
    	...
    default:
    	...
}

bb := 100
	switch bb {
	case 100:
		fmt.Printf("bb: %v\n", bb)
		fallthrough
	case 200:
		fmt.Println("200")
		fallthrough
	case 300:
		fmt.Println("300")
	default:
		fmt.Println("case都不成立就执行这里。")
	}

运行结果

bb: 100
200
300

go语言switch使用注意事项:

  1. 支持多条件匹配
  2. 不同的case之间不使用break分隔,默认只会执行一个case
  3. 如果想执行多个case,需要使用fallthrough关键字,也可以用break终止
  4. case后还可以使用条件表达式

go语言中的循环语句

go语言中的循环只有for循环,去除了while,do while循环,使用起来更加简洁。

  1. for循环。
  2. for range循环。(类似于python中的for in)
for语句

语法

for 初始语句;条件表达式;结束语句{
    循环语句
}
//for循环
	for i := 0; i < 10; i++ {
		fmt.Printf("i: %v\t", i)
	}
	fmt.Println("\n")
	//初始条件写在外面
	j := 0
	for ; j < 10; j++ {
		fmt.Printf("j: %v\t", j)
	}

	fmt.Println("\n")
	//结束语句写在循环体内
	for i := 0; i < 10; {
		fmt.Printf("i: %v\t", i)
		i++

	}
	fmt.Println("\n")

	//永真循环
	k := 0
	for {
		fmt.Printf("k: %v ", k)
		k++
		if k == 10 {
			break
		}
	}

运行结果

i: 0    i: 1    i: 2    i: 3    i: 4    i: 5    i: 6    i: 7    i: 8    i: 9

j: 0    j: 1    j: 2    j: 3    j: 4    j: 5    j: 6    j: 7    j: 8    j: 9

i: 0    i: 1    i: 2    i: 3    i: 4    i: 5    i: 6    i: 7    i: 8    i: 9

k: 0 k: 1 k: 2 k: 3 k: 4 k: 5 k: 6 k: 7 k: 8 k: 9 
for range语句

go语言中可以使用for range遍历数组,切片,字符串,map及通道(channel)。通过for range遍历的返回值有一下规律:

  1. 数组,切片,字符串返回索引和值
  2. map返回键和值
  3. 通道只返回通道内的值
//for range
	//遍历数组
	var arr = [...]int{1, 2, 3, 4, 5, 6, 7}
	for i, v := range arr {
		fmt.Printf("%v:%v\n", i, v)

	}

	//遍历map
	var m = make(map[string]string, 0)
	m["name"] = "Tom"
	m["age"] = "18"
	m["num"] = "1234"
	for k, v := range m {
		fmt.Printf("%v:%v\n", k, v)

	}

运行结果

name:Tom
age:18
num:1234

break关键字

break关键字可以结束for,switch和select的代码块。

//跳出for循环
k := 0
	for {
		fmt.Printf("k: %v ", k)
		k++
		if k == 10 {
			break
		}
	}

运行结果

k: 0 k: 1 k: 2 k: 3 k: 4 k: 5 k: 6 k: 7 k: 8 k: 9 
//配合标签使用
label:
	for i := 0; i < 10; i++ {
		fmt.Printf("i: %v\n", i)
		if i == 5 {
			break label
		}

	}
	fmt.Println("END...")

运行结果

i: 0
i: 1
i: 2
i: 3
i: 4
i: 5
END...

go语言中break的注意事项:

  1. 单独在select中使用break和不使用break没有啥区别。
  2. 单独在switch中使用break,并且没有使用fallthrough,和不使用break没有啥区别。
  3. 在switch中,配合fallthrough关键字,能够终止fallthrough后面case语句的执行。
  4. 带标签的break,可以跳出多层select/select作用域。让break更加灵活,写法更加简单,不需要使用控制变量一层一层跳出循环,没有带break的只能跳出当前语句。

continue关键字

continue只能用在循环中,在go中只能用在for循环中,它可以终止本次循环,进入下一轮循环。

continue也可以配合标签使用。

//打印10以内的偶数
	for i := 0; i < 11; i++ {
		if i%2 != 0 {
			continue
		}
		fmt.Printf("i: %v\n", i)
	}

运行结果

i: 0
i: 2
i: 4
i: 6
i: 8
i: 10

配合标签使用

label:

	for i := 0; i < 3; i++ {

		for j := 0; j < 3; j++ {
			if i == 1 && j == 1 {
				continue label //跳到label所在的地方
			}
			fmt.Printf("i: %v  j: %v\n", i, j)
		}

	}
	fmt.Println("i=1,j=1时跳出了循环。")

运行结果

i: 0  j: 0
i: 0  j: 1
i: 0  j: 2
i: 1  j: 0
i: 2  j: 0
i: 2  j: 1
i: 2  j: 2
i=1,j=1时跳出了循环。

goto关键字

goto语句通过标签进行代码间的无条件跳转。goto语句可以在快速跳出循环,避免重复退出上有一定帮助。

跳到指定标签
for i := 0; i < 10; i++ {
		fmt.Printf("i: %v\n", i)
		if i == 5 {
			goto label
		}

	}

label:
	fmt.Println("循环结束!")

运行结果

i: 0
i: 1
i: 2
i: 3
i: 4
i: 5
循环结束!
跳出多重循环
//与break不一样的是,break只能跳出一层循环,而goto可以直接跳出所有循环
for i := 0; i < 3; i++ {
		for j := 0; j < 3; j++ {
			for k := 0; k < 3; k++ {
				fmt.Printf("i=%v j=%v k=%v\n", i, j, k)
				if i == 1 && j == 1 && k == 1 {
					goto mylabel
				}

			}

		}

	}
mylabel:
	fmt.Println("循环结束!")

运行结果

i=0 j=0 k=0
i=0 j=0 k=1
i=0 j=0 k=2
i=0 j=1 k=0
i=0 j=1 k=1
i=0 j=1 k=2
i=0 j=2 k=0
i=0 j=2 k=1
i=0 j=2 k=2
i=1 j=0 k=0
i=1 j=0 k=1
i=1 j=0 k=2
i=1 j=1 k=0
i=1 j=1 k=1
循环结束!

同步更新于个人博客系统:golang学习笔记系列之流程控制

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GoLang学习笔记主要包括以下几个方面: 1. 语法规则:Go语言要求按照语法规则编写代码,例如变量声明、函数定义、控制结构等。如果程序中违反了语法规则,编译器会报错。 2. 注释:Go语言中的注释有两种形式,分别是行注释和块注释。行注释使用`//`开头,块注释使用`/*`开头,`*/`结尾。注释可以提高代码的可读性。 3. 规范代码的使用:包括正确的缩进和空白、注释风格、运算符两边加空格等。同时,Go语言的代码风格推荐使用行注释进行注释整个方法和语句。 4. 常用数据结构:如数组、切片、字符串、映射(map)等。可以使用for range遍历这些数据结构。 5. 循环结构:Go语言支持常见的循环结构,如for循环、while循环等。 6. 函数:Go语言中的函数使用`func`关键字定义,可以有参数和返回值。函数可以提高代码的重用性。 7. 指针:Go语言中的指针是一种特殊的变量,它存储的是另一个变量的内存地址。指针可以实现动态内存分配和引用类型。 8. 并发编程:Go语言提供了goroutine和channel两个并发编程的基本单位,可以方便地实现多线程和高并发程序。 9. 标准库:Go语言提供了丰富的标准库,涵盖了网络编程、文件操作、加密解密等多个领域,可以帮助开发者快速实现各种功能。 10. 错误处理:Go语言中的错误处理使用`defer`和`panic`两个关键字实现,可以有效地处理程序运行过程中出现的错误。 通过以上内容的学习,可以掌握Go语言的基本语法和编程思想,为进一步学习和应用Go语言打下坚实的基础。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Golang学习笔记](https://blog.csdn.net/weixin_52310067/article/details/129467041)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [golang学习笔记](https://blog.csdn.net/qq_44336275/article/details/111143767)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值