Go语言学习笔记(五)

本文详细介绍了Go语言中的控制流程,包括if、else、elseif(else if)、switch语句的用法,特别强调了Go中switch的特性,如不需要显式break。此外,还讲解了for循环的三种形式,以及defer语句的使用,它在函数返回前执行,常用于资源释放和清理操作。文中通过实例代码展示了各种控制流程的运用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、控制流程

前言:所谓的控制流程其实就是C++或者是pythonif-else语句等

1 if语句

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

这里if语句也没啥可写的,要注意一点就是在Goif后面的元素一定得是bool类型,因为Go是静态类型语言,不支持类型转换(转换得用strconv包中对应的函数)。

2 else语句

else语句指定了到达该分支时执行的代码。它不做任何判断,只要到达它所在的分支就执行。只要前面有语句的结果为trueelse语句就不会执行。在Go语言中,else语句紧跟在其他语句的右大括号后面,通常是当前语句块中的最后一条语句、大致而言,else相当于说:如果其他条件都不为true,就执行这条语句。

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

关于else语句的格式和之前提到的关键词func{在同一行一样,else必须和}在同一行,{和关键词if在同一行。

3 else if语句

else if语句和python中的elif语句是一个意思。

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

4 比较运算符

常见的比较运算符如下:
在这里插入图片描述
老生常谈,切记比较运算符的两个操作数的类型必须相同

5 算术运算符

常见的算术运算符如下:

字符运算符
+和(也叫加)
-差(也叫减)
*积(也叫乘)
/商(也叫除)
%余(也叫模)

同理,类型一致

6 逻辑运算符

字符运算符
&&与:两个条件是否都为true
||或:两个条件是否至少有一个为true
!非:条件是否为false

这里要注意的是:逻辑运算符的操作对象只能是布尔类型的变量

7 switch语句

emm不说了

package main

import "fmt"

func main() {
	i := 5
	switch i {
	case 2:
		fmt.Println("Two")
	case 3:
		fmt.Println("Three")
	case 4:
		fmt.Println("Four")
	default:
		fmt.Println("error")
	}
}

在这里要注意的是不像if语句一样,switch后面的判断条件可以不为bool值,但是要保证switch后面的参数和case的参数要类型一致;
和C++不一样的是每一个case是独立的,执行完某个case之后并不会顺位继续执行下一个case,就是说不需要刻意的像C++一样添加break关键字。

switch语句执行多条匹配

switch{
    case 1,2,3,4:
    default:
}

fallthrough关键字

使用 fallthrough 会强制执行后面的 case 语句,fallthrough 不会判断下一条 case 的表达式结果是否为 true。

package main

import "fmt"

func main() {

    switch {
    case false:
            fmt.Println("1、case 条件语句为 false")
            fallthrough
    case true:
            fmt.Println("2、case 条件语句为 true")
            fallthrough
    case false:
            fmt.Println("3、case 条件语句为 false")
            fallthrough
    case true:
            fmt.Println("4、case 条件语句为 true")
    case false:
            fmt.Println("5、case 条件语句为 false")
            fallthrough
    default:
            fmt.Println("6、默认 case")
    }
/*
2、case 条件语句为 true
3、case 条件语句为 false
4、case 条件语句为 true
*/
}

一个特殊的例子

package main

import "fmt"

func main() {
   /* 定义局部变量 */
   var grade string = "B"
   var marks int = 90

   switch marks {
      case 90: grade = "A"
      case 80: grade = "B"
      case 50,60,70 : grade = "C"
      default: grade = "D"  
   }

   switch {
      case grade == "A" :
         fmt.Printf("优秀!\n" )    
      case grade == "B", grade == "C" :
         fmt.Printf("良好\n" )      
      case grade == "D" :
         fmt.Printf("及格\n" )      
      case grade == "F":
         fmt.Printf("不及格\n" )
      default:
         fmt.Printf("差\n" );
   }
   fmt.Printf("你的等级是 %s\n", grade );      
}

这里之所以觉得他特殊,是因为第二个switch语句中,每个case是使用了逻辑表达式作为参数,记得C++中是不可以的。C++中的switch必须跟一个变量,后面的case必须是枚举类型,或者是可比较的类型。

8 for语句

Go语言中for语句的格式有很多种,接下来一一学习.

8.1 只包含条件的for语句

初始化语句在for循环的外面定义,后续语句在循环语句块中实现,关键词for后面只有条件语句的for语句。

package main

import "fmt"

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

8.2 包含初始化语句和后续语句的for语句

这个for语句格式就很全乎了
在这里插入图片描述

package main

import "fmt"

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

8.3 包含range子句的for语句

package main

import "fmt"

func main() {
	numbers := []int{1, 2, 3, 4}
	for i, n := range numbers {
		fmt.Println("The index of the loop is", i)
		fmt.Println("The value from the array is", n)
	}
}

这里注意,定义数组时使用的是{}而不是[]

9 defer语句

defer是一个很有用的Go语言功能,它能够让我们在函数返回前执行另一个函数。函数在遇到return语句或到达函数末尾时返回。defer语句通常用来执行清理操作或确保操作(如网络调用)完成后在执行另一个函数。

package main

import "fmt"

func main() {
	defer fmt.Println("I'm run after the function completes")
	fmt.Println("Hello World")
}

在这里插入图片描述

关于defer语句,我的理解是:他在return语句之前,语句块最后一句语句执行之后执行,我觉得可以理解为是类似于析构函数的东东

百度到的一些资料:Go语言的 defer 语句会将其后面跟随的语句进行延迟处理,在 defer 归属的函数即将返回时,将延迟处理的语句按 defer 的逆序进行执行,也就是说,先被 defer 的语句最后被执行,最后被 defer 的语句,最先被执行。
关键字 defer 的用法类似于面向对象编程语言 Java 和 C# 的 finally 语句块,它一般用于释放某些已分配的资源,典型的例子就是对一个互斥解锁,或者关闭一个文件。

参考书籍
 [1]: 【Go语言入门经典】[英] 乔治·奥尔波 著 张海燕 译
题外话:
  1. 挺好,身体健康,按时长大
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是兔不是秃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值