6、控制结构

1、条件语句

1.1if—else结构

if a>1{
	//do something
}
//存在else分支
if a>1{
	//do something
}else{
	//do something
}
//分支可以有很多个
if a>1{
	//do something
}else if a>0{//前段代码块的右大括号 }必须和 else-if 关键字在同一行
	//do something
}else{
	//do something
}

注意事项:if—else条件语句中声明的变量只在条件语句中存在,如果和成员变量有相同的名字,则成员变量被隐藏。

1.2switch结构

switch i{
	case -1,0: //当代码块只有一行时,可以直接放置在 case 语句之后。
		//do something不需要使用花括号将多行语句括起来
	case 1:
		//do something
	case 2:fallthrough//如果在执行完每个分支的代码后,还希望继续执行后续分支的代码,可以使用 fallthrough 关键字来达到目的
		//do something
	...
	default: //可选
		//do something
}
//switch 语句还可以被用于 type-switch 来判断某个 interface 变量中实际存储的变量类型。
switch x.(type){
    case type:
       //do something
    case type:
       //do something
}

1.3select结构
select是Go中的一个控制结构,类似于用于通信的switch语句。每个case必须是一个通信操作,要么是发送要么是接收。select随机执行一个可运行的case。如果没有case可运行,它将阻塞,直到有case可运行。一个默认的子句应该总是可运行的。
涉及通信channel,暂时跳过。

2、循环语句

如果想要重复执行某些语句,Go 语言中您只有 for 结构可以使用。
基本形式为:for 初始化语句; 条件语句; 修饰语句 {}

2.1for循环

//基于计数器的迭代
for i := 0;i<5;i++{
	//do something
}
//可以在循环中同时使用多个计数器
for i, j := 0, N; i < j; i, j = i+1, j-1 {}
//循环嵌套
for i:=0; i<5; i++ {
	for j:=0; j<10; j++ {
	//do something
	}
}
//基于条件判断的迭代,没有初始化语句和修饰语句的 for 结构
for i>0{
	//do something
	i--
}
//无限循环
//如 i:=0; ; i++ 或 for { } 或 for ;; { } ( ;; 会在使用 gofmt 时被移除)或for true { } 或for { } 。
//

2.2for-range结构
它可以迭代任何一个集合(包括数组和 map)
一般形式:for ix, val := range collection { }
要注意的是, val 始终为集合中对应索引的值拷贝,因此它一般只具有只读性质,对它所做的任何修改都不会影响到集合中原有的值(如果 val 为指针,则会产生指针的拷贝,依旧可以修改集合中的原值)。

2.3break、continue、goto
一个 break 的作用范围为该语句出现后的最内部的结构。但在 switch 或 select 语句中,break 语句的作用结果是跳过整个代码块,执行后续的代码。关键字 continue 忽略剩余的循环体而直接进入下一次循环的过程

func main() {
for i := 0; i < 10; i++ {
	if i == 5 {
	continue//break
	}
	fmt.Print(i)
	}
}

for、switch 或 select 语句都可以配合标签(label)形式的标识符使用。可以使用 goto 语句和标签配合使用来模拟循环(在发生读取错误时,使用 goto 来跳出无限读取循环并关闭相应的客户端链接)。

func main() {
MYLABEL:
for i := 0; i < 10; i++ {
	if i == 5 {
	continue MYLABEL//跳转到 LABEL1 标签的位置
	}
	fmt.Print(i)
	}
}
func main() {
	i:=0
	HERE:
	print(i)
	i++
	if i==5 {
	return
	}
	goto HERE
}

猜你喜欢

转载自blog.csdn.net/ao__ao/article/details/83999919