• go-007-条件语句


    一、概述

    条件语句需要开发者通过指定一个或多个条件,并通过测试条件是否为 true 来决定是否执行指定语句,并在条件为 false 的情况在执行另外的语句。

    1.if结构

    if 布尔表达式 {
       /* 在布尔表达式为 true 时执行 */
    }

    2.swatch结构

    switch 语句用于基于不同条件执行不同动作,每一个 case 分支都是唯一的,从上直下逐一测试,直到匹配为止。。

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

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

    switch {
        case var1==val1:
            ...
        case car1==val2:
            ...
        default:
            ...
    }

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

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

    type swatch

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

    Type Switch 语法格式如下:

    switch x.(type){
        case type:
           statement(s);      
        case type:
           statement(s); 
        /* 你可以定义任意个数的case */
        default: /* 可选 */
           statement(s);
    }

    示例

    package main
    
    import "fmt"
    func main() {
       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("未知型")     
       }   
    }
    View Code

    3.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会随机公平地选出一个执行。其他不会执行。 
        否则:
        1. 如果有default子句,则执行该语句。
        2. 如果没有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
    ")
          case c2 <- i2:
             fmt.Printf("sent ", i2, " to c2
    ")
          case i3, ok := (<-c3):  // same as: i3, ok := <-c3
             if ok {
                fmt.Printf("received ", i3, " from c3
    ")
             } else {
                fmt.Printf("c3 is closed
    ")
             }
          default:
             fmt.Printf("no communication
    ")
       }    
    }
    View Code
  • 相关阅读:
    Android 修改应用程序字体
    Activity A 跳转到Activity B 生命周期
    Android调用系统设置
    最近遇到adb connection 问题,总结一下
    今日写一篇散文 Textview settext 方法不能放入 int 参数 不然报错!
    计时线程Runnable和Handler的结合
    JMF 下载安装与测试 测试成功
    基本数据类型的介绍及转换,基本数据类型与字符串之间转换,字符串与字符数组之间转换以及字符串与字节数组之间转换
    超实用的Eclipse快捷键大全(解密为什么他们的代码写的又快又好~)
    JDK的下载、安装及Eclipse安装详细教程(内附:网盘win64版JDK安装包)
  • 原文地址:https://www.cnblogs.com/bjlhx/p/6824836.html
Copyright © 2020-2023  润新知