切换语句中的falltrough行为

时间:2015-06-27 15:33:54

标签: go switch-statement

我正在阅读关于Go中switch语句的this book部分。但这个例子使我感到困惑:

was <= 6
was <= 7
was <= 8
default case

输出结果为:

//connect file
$conn = new mysqli($servername, $username, $password, $dbname);

// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

//connect file included above - ECHO tested and it is connected as $conn

$sql = "SELECT * FROM userInfo";
$results = $conn->query($sql);
if (!$results) {
    printf("Errormessage: %s\n", $conn->error);
    exit;
} else {
    echo $row['username'];
}

这本书指出:

  

使用fallthrough语句指示必须执行当前案例块之后的案例块。

现在我提出问题:

  1. 为什么Go默认比较,在这种情况下k更低?
  2. 该文提到执行以下情况。精细。但是为什么他们只是执行了案件匹配k?

1 个答案:

答案 0 :(得分:2)

  

The Go Programming Language Specification

     

Switch statements

     

表达式切换

     

在表达式开关中,评估开关表达式并且   案例表达式,不必是常量,进行评估   从左到右,从上到下;第一个等于开关的   表达式触发执行相关联的语句   案件;其他案例被跳过。如果没有案例匹配且有一个   “默认”情况下,其语句被执行。最多可以有一个   默认情况下,它可能出现在“switch”语句中的任何位置。一个   缺少开关表达式相当于布尔值true。

ExprSwitchStmt = "switch" [ SimpleStmt ";" ] [ Expression ] "{" { ExprCaseClause } "}" .
ExprCaseClause = ExprSwitchCase ":" StatementList .
ExprSwitchCase = "case" ExpressionList | "default" .
     

在case或default子句中,最后一个非空语句可能是a   (可能标记)“fallthrough”声明表示控制   应该从这个子句的结尾流到第一个语句   下一条。否则控制流到“开关”的末尾   声明。 “fallthrough”语句可能显示为最后一个语句   除了表达式开关的最后一个子句之外的所有子句。

     

表达式可以在一个简单的语句之前执行   在评估表达式之前。

从上到下评估案例表达式。 case 4case 5falsecase 6truecase 7case 8defaultfalse,但可以通过fallthrough转到下一个子句来执行。