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是不错的选择