GO语言学习笔记3—控制流程

if语句

在之前学习的编程语言和平时编写代码的过程中运用最多的语句可能就是if了
所以在此对if 的作用不做介绍仅仅针对go语言中if的使用方法做一下介绍
现在来看一下go中的一段if代码

package main

import("fmt")

fun main(){
	b := true
	if b {
		fmt.Println("b is true!")
	}
}

程序解读:
声明变量b并将其初始化为true,这个变量被推断为布尔类型
使用一条if语句判断b是否为true
由于这条if语句的结果为true,因此执行大括号内的代码
在终端界面打印一行文本b is true
若果将b的值改为false,则这条if语句执行的结果将是false,因此不会执行大括号内的代码

else语句

else 是if的另一个分支,举个很简单的例子,有a和b,若你不是a那么你就是b

package main

import("fmt")

func main(){
	b:= false
	if b {
	fmt.Println("b is true")
	} else {
	fmt.Println("b is false")
	}
}

else if语句

很多情况下,都需要依次判断多个布尔表达式。else if语句能够让你根据前面的布尔表达式为false时借着判断后面的布尔表达式。

package main

import("fmt")

func main(){
	i := 3
	if i == 3{
		fmt.Println("i is 3")
	}else if i == 2{
		fmt.Println("i is 2")
	}
}

程序解读:
生面变量并将其初始化为2
第一条if语句判断其值是否为3,若不过是则转到else if 重新进行判断其值是否为2
由于变量值等于2,因此执行下一行代码,向终端打印一行文本

比较运算符、算数运算符、逻辑运算符

字符运算符
==等于
!=不等于
<小于
<=小于等于
>大于
>=大于等于

比较运算符在操作的时候,两个操作数的类型必须一致

字符运算符
+
-
*
/
%

和比较运算符一样,算数运算符也只能用于类型一致的操作数

字符运算符
&&
(两个竖线)编译器问题无法显示

switch语句

package main

import("fmt")

func main(){
	i := 2
	switch i{
	case 2:
		fmt.Println("two")
	case 3:
		fmt.Println("three")
	case 4:
		fmt.Println("four")
	default:
		fmt.Println("i do not have this number")
	}
}

for循环

package main

import("fmt")

func main(){
i := 0
for i < 10 {
	i++
	fmt.Println("i is",i)
	}
}

程序解读:
声明变量并将其初始化为0
for语句判断i是否小于10
如果布尔条件为真就执行for语句中的代码

//包含初始化和后续语句的句子
package main

import("fmt")
 func main(){
 for i:= 0;i < 10;i++{
 	fmt.Println("i is",i)
 	}
 }

程序解读:
声明变量i并将其初始化为0
一条for语句检查变量是否小于10
如果这个布尔表达式为真,则执行for语句中的代码
使用递增运算符讲变量i的值加1
讲变量i的值打印到终端

包含range子句的for语句

package main

import("fmt")

func main(){
	numbers :=[]int{1,2,3,4}
	for i,n := range number{
		fmt.Println(i)
		fmt.Println(n)
		}
}

程序解读:
声明变量numbers,并将一个包含四个整数的数组赋给他
for语句指定了迭代变量i,用于存储索引值,这个变量将在每次迭代结束后更新,迭代变量从0开始
for语句指定了迭代变量n,用于存储来自数组中的值

defer语句

defer可以在函数返回前执行另一个函数

package main

import("fmt")

func main(){
	defer fmt.Println("i am a pig")
	fmt.Println("you are a pig")
	}
}

打印结果是
you are a pig
i am a pig
defer关键字在go中用于return之前执行。defer的用法类似java中的finally语句块,一般用于释放已分配的资源。
但如果是多条defer语句呢

func main(){
	defer func() { fmt.Println("延迟调用1") }()
	defer func() { fmt.Println("延迟调用2") }()
	fmt.Println("正常代码")
}

输出结果为
正常代码
延迟调用2
延迟调用1
这是因为每一个协程都会维护一个延迟调用堆栈,按照代码顺序把需要延迟调用的函数压入栈中,当函数进入退出阶段后,就会从延迟调用堆栈中取出需要执行的函数调用并执行

测验

为何要使用的defer语句,而不直接使用常规控制流程?在需要某项工作完成后执行特定函数时,defer是不错的选择

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值