站长资讯网
最全最丰富的资讯网站

golang流程控制语句有哪些

流程控制语句:1、if语句,由一个布尔表达式后紧跟一个或多个语句组成;2、“if…else”语句,else中的表达式在布尔表达式为false时执行;3、switch语句,用于基于不同条件执行不同动作;4、select语句;5、for循环语句,语法“for k,v := range oldmap{newmap[k]=v}”;6、循环控制语句break、continue、goto。

golang流程控制语句有哪些

本教程操作环境:windows7系统、GO 1.18版本、Dell G3电脑。

下面我们了解一下关于golang流程控制语句的基本内容。

1、条件分支语句

和c语言类似,相关的条件语句如下表所示:

语句 描述
if 语句 if 语句 由一个布尔表达式后紧跟一个或多个语句组成。
if…else 语句 if 语句 后可以使用可选的 else 语句, else 语句中的表达式在布尔表达式为 false 时执行。
switch 语句 switch 语句用于基于不同条件执行不同动作。
select 语句 select 语句类似于 switch 语句,但是select会随机执行一个可运行的case。如果没有case可运行,它将阻塞,直到有case可运行。
  • if语句
    语法如下:

if 布尔表达式 {    /* 在布尔表达式为 true 时执行 */ }
登录后复制

  • if-else语句

if 布尔表达式 {    /* 在布尔表达式为 true 时执行 */ } else { 	/* 在布尔表达式为 false 时执行 */ }
登录后复制

  • switch语句
    其中的变量v可以是任何类型,val1val2可以是同类型的任意值,类型不局限为常量或者整数,或者最终结果为相同类型的表达式。

switch v {     case val1:         ...     case val2:         ...     default:         ... }
登录后复制

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

select {     case communication clause  :        statement(s);           case communication clause  :        statement(s);     /* 你可以定义任意数量的 case */     default : /* 可选 */        statement(s); }
登录后复制

注意:

  • 每个case必须都是一个通信
  • 所有channel表达式都会被求值,所有被发送的表达式都会被求值
  • 如果任意某一个通信都可以,它就执行,其他就忽略
  • 如果有多个case都可以运行,select就会随机挑选一个来执行。
  • 如果没有一个case可以被运行:如果有default子句,就执行default子句,select将被阻塞,直到某个通信可以运行,从而避免饥饿问题。

2、循环语句

2.1 循环处理语句

与多数语言不同的是,Go语言中的循环语句只支持 for 关键字,而不支持 while 和 do-while 结构,关键字 for 的基本使用方法与C语言和 C++ 中非常接近。

go中时使用for实现循环的,共有三种形式:

语法
和c语言中的for相同 for init; condition; post {}
和c语言中的while相同 for condition{}
和c语言中的for(;;)相同 for{}

除此以外,for循环还可以直接使用range对slice、map、数组以及字符串等进行迭代循环,格式如下:

for key, value := range oldmap { 	newmap[key] = value }
登录后复制

2.2 循环控制语句

控制语句 详解
break 中断跳出循环或者switch语句
continue 跳过当前循环的剩余语句,然后继续下一轮循环
goto语句 将控制转移到被标记的语句

1、break

break主要用于循环语句跳出循环,和c语言中的使用方式是相同的。且在多重循环的时候还可以使用label标出想要break的循环。
实例代码如下:

a := 0 for a<5 { 	fmt.Printf("%dn", a) 	a++ 	if a==2 { 		break; 	} } /* output 0 1 2 */
登录后复制

2、continue

Go 语言的 continue 语句 有点像 break 语句。但是 continue 不是跳出循环,而是跳过当前循环执行下一次循环语句。在多重循环中,可以用标号 label 标出想 continue 的循环。
实例代码如下:

    // 不使用标记     fmt.Println("---- continue ---- ")     for i := 1; i <= 3; i++ {         fmt.Printf("i: %dn", i)             for i2 := 11; i2 <= 13; i2++ {                 fmt.Printf("i2: %dn", i2)                 continue             }     }  /* output i: 1 i2: 11 i2: 12 i2: 13 i: 2 i2: 11 i2: 12 i2: 13 i: 3 i2: 11 i2: 12 i2: 13 */      // 使用标记     fmt.Println("---- continue label ----")     re:         for i := 1; i <= 3; i++ {             fmt.Printf("i: %d", i)                 for i2 := 11; i2 <= 13; i2++ {                     fmt.Printf("i2: %dn", i2)                     continue re                 }         }  /* output i: 1 i2: 11 i: 2 i2: 11 i: 3 i2: 11 */
登录后复制

3、goto

goto语句主要是无条件转移到过程中指定的行。goto语句通常和条件语句配合使用,可用来实现条件转移、构成循环以及跳出循环体等功能。但是并不主张使用goto语句,以免造成程序流程混乱。
示例代码如下:

var a int = 0 LOOP: for a<5 { 	if a == 2 { 		a = a+1 		goto LOOP 	} 	fmt.Printf("%dn", a) 	a++ }  /* output: 0 1 2 3 4 */
登录后复制

以上代码中的LOOP就是一个标签,当运行到goto语句的时候,此时执行流就会跳转到LOOP标志的哪一行上。

赞(0)
分享到: 更多 (0)
网站地图   沪ICP备18035694号-2    沪公网安备31011702889846号