我正在阅读关于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语句指示必须执行当前案例块之后的案例块。
现在我提出问题:
答案 0 :(得分:2)
The Go Programming Language Specification
表达式切换
在表达式开关中,评估开关表达式并且 案例表达式,不必是常量,进行评估 从左到右,从上到下;第一个等于开关的 表达式触发执行相关联的语句 案件;其他案例被跳过。如果没有案例匹配且有一个 “默认”情况下,其语句被执行。最多可以有一个 默认情况下,它可能出现在“switch”语句中的任何位置。一个 缺少开关表达式相当于布尔值true。
ExprSwitchStmt = "switch" [ SimpleStmt ";" ] [ Expression ] "{" { ExprCaseClause } "}" . ExprCaseClause = ExprSwitchCase ":" StatementList . ExprSwitchCase = "case" ExpressionList | "default" .
在case或default子句中,最后一个非空语句可能是a (可能标记)“fallthrough”声明表示控制 应该从这个子句的结尾流到第一个语句 下一条。否则控制流到“开关”的末尾 声明。 “fallthrough”语句可能显示为最后一个语句 除了表达式开关的最后一个子句之外的所有子句。
表达式可以在一个简单的语句之前执行 在评估表达式之前。
从上到下评估案例表达式。 case 4
和case 5
为false
,case 6
为true
。 case 7
,case 8
和default
为false
,但可以通过fallthrough
转到下一个子句来执行。