【go语言】条件,选择,循环和特殊语句

if语句

a:=10
if a>20{
	fmt.Printf("a大于20")
}else if a<10{
	fmt.Printf("a小于10")
}else{
	fmt.Printf("a大于等于10,a小于等于20")
}

go语言的if语句和C语言的if语句的差不多,需要注意的是else 和else if要写在括号右边;go语言的if语句还可以有一个子语句

if语句的子语句

if语句的子语句的作用是用来初始化局部变量

if a:=10;a<20{
    fmt.Printf("a小于20")
}else{
    fmt.Printf("a小于20")
}

但要注意的是,子语句中只能有一个表达式

switch语句

Go 语言中,switch 表示选择语句的关键字, switch 语句会根据初始化表达式得出一个值,然后根据 case 语句的条件,执行相应的代码块, 最终返回特定内容。每个 case被称为一种情况,只有当初始化语句的值符合 case 的条件语句时, case才会被执行 。如果没有遇到符合的 case,则可以使用默认的 case (default case),如果己经遇到了符合的 case , 那么后面的 case 都不会被执行。
switch语句有两种类型

  • 表达式switch
  • 类型switch

表达式switch

表达式switch的一种写法和C语言的switch类似,不过没有break语句。

	grade:=80
	switch grade{
	case 60:
		fmt.Println("及格")
	case 80:
		fallthrough
	case 90:
		fmt.Println("优秀")
	}

fallthrough关键字的作用是把case的控制权交给下一个case,这个程序输出优秀
在这里插入图片描述

grade:=80
switch{
	case grade>=60:
		fmt.Println("及格了")
	case grade<60:
		fmt.Println("没有及格")
	}

类型switch

var x interface{}
x=1
switch i:=x.(type){
case int:
	fmt.Printf("x的类型是%T\n",i)
case float64:
	fmt.Printf("x的类型是%T",i)
default:
	fmt.Println("其他类型");
}

在这里插入图片描述

类型switch判断的变量必须是具有接口类型的变量

循环语句

go语言只有for循环没有while循环

for循环的几种形式

for initialization;condition;post{}

for i:=0;i<5;i++{
	fmt.Println(i)
} 

在这里插入图片描述

1for ;condition;post{}

for ;i<5;i++{
	fmt.Println(i)
}

在这里插入图片描述

for condition{} 相当于while循环

for{} 死循环

for range

str:="abcd"
for i,ch:=range str{
	fmt.Printf("字符串的第%d个字符值为%d",i,ch)
}
for _,ch:=range str{
	fmt.Println(ch)
}
for i,_:=range str{
	fmt.Println(i)
}

在这里插入图片描述

for和range结合可以轮询字符串的每一个字符,这种方式也可以用来轮询数组、切片、字典等。range返回的是一对 索引–值

range的返回值

右边表达式的类型第一个值第二个值
stringindexstr[index]
arr/sliceindexarr[index]/slice[index]
mapkeymap[key]

延迟语句defer

defer用来延迟调用一个函数(在函数的最后执行),只能在一个函数内部使用
而且函数是执行完所有defer语句才执行return语句的。

func main(){
	defer fmt.Println("好")
	fmt.Println("你")
}

在这里插入图片描述

那么在一个函数内有多个defer语句会以什么顺序执行?
最后的defer语句最先执行,defer语句就是一个栈。

func main(){
	for i:=0;i<5;i++{
		defer fmt.Println(i)
	}
}

在这里插入图片描述

break语句

var i int =0
for{
	if i>5{
		break
	}
	i++
	fmt.Println("for循环结束了?")
}
fmt.Println("for循环结束了")

在这里插入图片描述

go语言的break有一个比较坑的地方

for{
	grade:=80
	switch{
	case grade>60:
		fmt.Println("及格了")
		break
	case grade==60:
		fmt.Println("差点没及格")
	case grade<60:
		fmt.Println("没有及格")

	}
}

这个时候break根本就不会跳出for循环,也就是说这个循环还是个死循环!!!要想跳出这个循环就必须要用标签
在这里插入图片描述

loop:for{
	grade:=80
	switch{
	case grade>60:
		fmt.Println("及格了")
		break loop
	case grade==60:
		fmt.Println("差点没及格")
	case grade<60:
		fmt.Println("没有及格")
	}
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值