从零开始学GO ---- if-else语句、switch语句、for语句、标签和跳转

本文介绍了Go语言的基础语法,包括if-else语句的使用,如条件判断与初始化;switch语句的特性,如fallthrough强制执行下一个case;for循环的三种模式及其在遍历数据结构时的应用;以及标签和跳转语句(goto, break, continue)的详细说明,强调了它们在控制流程中的作用。" 111458448,10295673,Python实现2的n次方与亲戚关系计算器,"['Python编程', '算法', '关系计算', '正则表达式']

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

从零开始学GO ---- if-else语句、switch语句、for语句、标签和跳转

程序执行本质上来说就是两种模式:顺序和跳转

  • 顺序就是按照程序指令在存储器上的存放顺序逐条执行
  • 跳转就是遇到跳转指令就跳转到某处继续线性执行

顺序在Go里面体现在从main函数开始逐条向下执行,跳转体现在包括goto语句、函数调用以及分支循环等。

if-else语句

if-else语句的通常写法:

if 表达式1 {
    分支1
} else if 表达式2 {
    分支2
} else{
    分支3
}
  • if后面的条件判断子句不需要小括号括起来

  • {必须放在行尾,和if或者if else放在一行

  • if后可以带一个简单的初始化语句,并以分号分隔,这个简单语句声明的变量作用域是整个if语句块,包括后面的if else和else分支

    func main() {
    	if score := 65; score >= 90 {
    		fmt.Println("A")
    	} else if score > 75 {
    		fmt.Println("B")
    	} else {
    		fmt.Println("C")
    	}
    }
    
  • if分支语句遇到return则直接返回,遇到break则跳过break下方的if语句

switch语句

switch语句会根据传入的参数检测并执行符合条件的分支

func main() {
	switch i := "y"; i { //switch后面可以带上一个初始化语句
	case "y", "Y": //可以匹配多个值,用逗号分开即可
		fmt.Println("Yes")
		fallthrough //fallthrough会跳过接下来的case条件判断句,直接执行下一个case语句
	case "n", "N":
		fmt.Println("No")
	}
	//输出  YES  NO
}
  • switch条件表达式可以支持任何可以进行比较运算的类型变量
  • 通过fallthrough可以来强制执行下一个case语句(不需要判断是否满足)
  • switch支持default语句,当所有的case分支都不符合时,执行default语句,default可以放在任意位置
for语句

Go语言只支持一种循环语句,即for语句。

类似于C++的for循环模式:for init;condition;post{}

类似于C++中的while循环模式:for condition{}

类似于C++中的while(1)循环模式: for{}

func main() {
	for i := 1; i < 10; i++ {
		fmt.Printf("%d ", i)
	}
	//1 2 3 4 5 6 7 8 9
}

Go语言中可以使用for range遍历数组、切片、字符串、map 及通道(channel)

//访问map
for key,value:=range map{}
for key:=range map{}
//访问数组
for index,value:=range array{}
for _,value:=range array{}
//访问切片
for index,value:=range slice{}
for _,value:=range slice{}
标签和跳转

Go语言使用标签来标识一个语句的位置,用于goto、break、continue语句的跳转 Lable:Statement

goto语句:用于函数的内部跳转,需要配合标签使用 goto Lable

  • goto语句只能在函数内进行跳转

  • goto语句不能跳过内部变量声明语句

    	goto L
    	v:=3         //这是不允许的,不允许跳过v:=3
    L:
    
  • goto语句只能跳到同级或者上层作用域,不可以跳到内部作用域

func gotoDemo() {
	for i := 0; i < 10; i++ {
		for j := 0; j < 10; j++ {
			if j == 2 {
				// 设置退出标签
				goto breakTag
			}
			fmt.Printf("%v-%v\n", i, j)
		}
	}
	return
	// 标签
breakTag:
	fmt.Println("结束for循环")
}

break语句:用于跳出for switch select语句的执行

  • 单独使用break,可以跳出break当前所在的for switch select语句
  • 配合标签一起使用,用于跳出标签所标识的for switch select语句
func main() {
L1:
	for i := 0; ; i++ {
		for j := 0; ; j++ {
			fmt.Printf("i:%d j:%d\n", i, j)
			if i >= 1 {
				break L1 //跳出L1标签所在的for循环
			}
			if j > 10 {
				break //跳出离break最近的内层循环
			}
		}
	}
}
//运行结果:
i:0 j:0
i:0 j:1
i:0 j:2
i:0 j:3
i:0 j:4
i:0 j:5
i:0 j:6
i:0 j:7
i:0 j:8
i:0 j:9
i:0 j:10
i:0 j:11   //此时j>10 跳出了内层循环
i:1 j:0    //此时i>=1,跳出了L1标记的循环,即外循环

continue语句用于跳出for循环的本次迭代,跳到for循环的下一次迭代的post语句处执行

  • 单独使用continue,用于跳出continue当前所在的for循环的本次迭代
  • 和标签一起使用,用于跳出标签所标识的for语句的本次迭代
func main() {
L1:
	for i := 0; ; i++ {
		for j := 0; ; j++ {
			if i == 1 {
				continue L1 //跳到L1标签所在的for循环的下一次,即i=2的下一轮循环
			}
			if j==10 { 
				continue   //跳过j==10这一次的内圈循环,即开始j=11的下一轮循环
			}
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值