【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语句

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,这个程序输出优秀
【go语言】条件,选择,循环和特殊语句_第1张图片

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("其他类型");
}

【go语言】条件,选择,循环和特殊语句_第2张图片

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

循环语句

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

for循环的几种形式

for initialization;condition;post{}

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

【go语言】条件,选择,循环和特殊语句_第3张图片

1for ;condition;post{}

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

【go语言】条件,选择,循环和特殊语句_第4张图片

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)
}

【go语言】条件,选择,循环和特殊语句_第5张图片

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

延迟语句defer

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

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

【go语言】条件,选择,循环和特殊语句_第6张图片

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

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

【go语言】条件,选择,循环和特殊语句_第7张图片

break语句

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

【go语言】条件,选择,循环和特殊语句_第8张图片

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

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

	}
}

这个时候break根本就不会跳出for循环,也就是说这个循环还是个死循环!!!要想跳出这个循环就必须要用标签
【go语言】条件,选择,循环和特殊语句_第9张图片

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

【go语言】条件,选择,循环和特殊语句_第10张图片

你可能感兴趣的:(golang,golang,服务器,开发语言)