go语言学习6(流程控制和循环)

语句

举例

if 语句

if a < 20 {

       /* 如果条件为 true 则执行以下语句 */

       fmt.Printf("a 小于 20\n" )

   }

if...else 语句

/* 判断布尔表达式 */

   if a < 20 {

       /* 如果条件为 true 则执行以下语句 */

       fmt.Printf("a 小于 20\n" );

   } else {

       /* 如果条件为 false 则执行以下语句 */

       fmt.Printf("a 不小于 20\n" );

   }

if 嵌套语句

if a == 100 {

       /* if 条件语句为 true 执行 */

       if b == 200 {

          /* if 条件语句为 true 执行 */

          fmt.Printf("a 的值为 100 b 的值为 200\n" );

       }

   }

switch 语句

switch var1 {

    case val1:

        ...

    case val2:

        ...

    default:

        ...

}

变量 var1 可以是任何类型,而 val1 val2 则可以是同类型的任意值。类型不被局限于常量或整数,但必须是相同的类型;或者最终结果为相同类型的表达式。

 

您可以同时测试多个可能符合条件的值,使用逗号分割它们,例如:case val1, val2, val3

Type Switch:

switch 语句还可以被用于 type-switch 来判断某个 interface 变量中实际存储的变量类型。

 

Type Switch 语法格式如下:

 

switch x.(type){

    case type:

       statement(s);     

    case type:

       statement(s);

    /* 你可以定义任意个数的case */

    default: /* 可选 */

       statement(s);

}

fallthrough:

使用 fallthrough 会强制执行后面的 case 语句,fallthrough 不会判断下一条 case 的表达式结果是否为 true。用代码示例体会下:

package main

 

import "fmt"

 

func main() {

 

    switch {

    case false:

            fmt.Println("1case 条件语句为 false")

            fallthrough

    case true:

            fmt.Println("2case 条件语句为 true")

            fallthrough

    case false:

            fmt.Println("3case 条件语句为 false")

            fallthrough

    case true:

            fmt.Println("4case 条件语句为 true")

    case false:

            fmt.Println("5case 条件语句为 false")

            fallthrough

    default:

            fmt.Println("6、默认 case")

    }

}

输出结果为:

2case 条件语句为 true

3case 条件语句为 false

4case 条件语句为 true

从以上代码输出的结果可以看出:switch 从第一个判断表达式为 true case 开始执行,如果 case 带有 fallthrough,程序会继续执行下一条 case,且它不会去判断下一个 case 的表达式是否为 true

select 语句

select Go 中的一个控制结构,类似于用于通信的 switch 语句。每个 case 必须是一个通信操作,要么是发送要么是接收。

 

select 随机执行一个可运行的 case。如果没有 case 可运行,它将阻塞,直到有 case 可运行。一个默认的子句应该总是可运行的。

语法如下:

select {

    case communication clause  :

       statement(s);     

    case communication clause  :

       statement(s);

    /* 你可以定义任意数量的 case */

    default : /* 可选 */

       statement(s);

}

以下描述了 select 语句的语法:

 

每个 case 都必须是一个通信

所有 channel 表达式都会被求值

所有被发送的表达式都会被求值

如果任意某个通信可以进行,它就执行,其他被忽略。

如果有多个 case 都可以运行,Select 会随机公平地选出一个执行。其他不会执行。

否则:

如果有 default 子句,则执行该语句。

如果没有 default 子句,select 将阻塞,直到某个通信可以运行;Go 不会重新对 channel 或值进行求值。

最好还是跑一个示例:

package main

 

import "fmt"

 

func main() {

   var c1, c2, c3 chan int

   var i1, i2 int

   select {

      case i1 = <-c1:

         fmt.Printf("received ", i1, " from c1\n")

      case c2 <- i2:

         fmt.Printf("sent ", i2, " to c2\n")

      case i3, ok := (<-c3):  // same as: i3, ok := <-c3

         if ok {

            fmt.Printf("received ", i3, " from c3\n")

         } else {

            fmt.Printf("c3 is closed\n")

         }

      default:

         fmt.Printf("no communication\n")

   }   

}

Go语言中循环采用for语句(没有while,for替代),有如下三种定义方式:

1. for init; condition; post { }

    init为初始条件;condition: 关系表达式或逻辑表达式,循环控制条件;post: 一般为赋值表达式,给控制变量增量或减量

2. for condition { }

    同C语言的while语句一样

3.for { }

死循环,同for(;;)

另外,可以采用for循环的range格式对slice、map、数组和字符串等进行循环遍历,如

for key, value := range oldMap {

newMap[key] = value

}

break、continue、goto的用法同c语言

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值