GO 条件语句 与 循环语句

GO 条件语句 与 循环语句

八、条件语句

1、if语句

格式

if 布尔表达式{
	
}

例:

 if a > 10 {
	printf(a)
}

2、if…else语句

格式

if 布尔表达式{
	
} else if 布尔表达式{
	
} else {
	
}

3、if嵌套语句

4、switch语句

(1)switch 语句执行的过程从上至下,直到找到匹配项,匹配项后面也不需要再加 break。

(2)switch 默认情况下 case 最后自带 break 语句,匹配成功后就不会执行其他 case,如果我们需要执行后面的 case,可以使用 fallthrough
格式:

switch var1 {
	case val1:
	case val2:
	default:
}

例1:

 	var mark int
	var grade string
	fmt.Scan(&mark)
	switch mark {
	case 90: grade = "A"
	case 80: grade ="B"
	case 60,70: grade="C"
	default: grade = "D"
	}

例2:

  switch {
      case grade == "A" :
         fmt.Printf("优秀!\n" )    
      case grade == "B", grade == "C" :
         fmt.Printf("良好\n" )      
      case grade == "D" :
         fmt.Printf("及格\n" )      
      case grade == "F":
         fmt.Printf("不及格\n" )
      default:
         fmt.Printf("差\n" );
   }

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

   var x interface{}  
   switch i := x.(type) {
      case nil:  
         fmt.Printf(" x 的类型 :%T",i)                
      case int:  
         fmt.Printf("x 是 int 型")                      
      case float64:
         fmt.Printf("x 是 float64 型")          
      case func(int) float64:
         fmt.Printf("x 是 func(int) 型")                      
      case bool, string:
         fmt.Printf("x 是 bool 或 string 型" )      
      default:
         fmt.Printf("未知型")    
   }

(4)使用 fallthrough强制执行后面的 case 语句,fallthrough 不会判断下一条 case 的表达式结果是否为 true

5、select语句

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

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

(3)select 会循环检测条件,如果有满足则执行并退出,否则一直循环检测。

(4)格式:

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

(1)每个 case必须是一个通信

(2)所有 channel 表达式都会被求值

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

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

(5)如果有多个 case 都可以运行,Select 会随机公平地选出一个执行。其他不会执行。
否则:
(1)如果有 default 子句,则执行该语句。

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

例:

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

6、注:

Go 没有三目运算符****不支持 ? : 形式的条件判断

九、循环语句

1、for循环

(1)第种形式:和 c 语言的 for 一样

for 初始值; 循环控制条件; 控制变量增还是减{}

(2)第种形式:和 c 语言的 while 一样

for 循环控制条件 {}

(3)第种形式:和 c 语言的 for( ; ; ) 一样

for {}

2、For-each range 循环

这种格式的循环可以对字符串、数组、切片等进行迭代输出元素

例:

//for-each range循环
	str := []string{"ab", "cd", "efg"}
	for i, s := range str {
		println(i, s)
	}
	nums := [6]int{1,2,3,4}
	for i, num := range nums{
		println(i,num)
	}

3、循环控制语句

(1)break
在多重循环中,可以用标号 label 标出想 break 的循环
例:re:
for
for
break re
例:

var flag int
	for i := 2; i<= 100; i++{
		flag = 0
		for j := 2; j<=i/2; j++ {
			if(i%j == 0){
				flag=1
				break
			}
		}
		if flag==0 {
			println(i,"是素数")
		}
	}

(2)continue
在多重循环中,可以用标号 label 标出想 continue 的循环

(3)goto
Go 语言的 goto 语句可以无条件地转移到过程中指定的行
格式:
goto lable

lable:

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值