Go Quizzes 101 (4)

less than 1 minute read

题目

查看原题 Play

package main

func alwaysFalse() bool {
	return false
}

func main() {
	switch alwaysFalse(); {
	case true:
		println(true)
	case false:
		println(false)
	}
}

分析

switch-case 代码块的标准形式是:

switch InitSimpleStatement; CompareOperand0 {
case CompareOperandList1:
	// do something
case CompareOperandList2:
	// do something
...
case CompareOperandListN:
	// do something
default:
	// do something
}

其中:

  • InitSimpleStatement 是可以省略的。
  • CompareOperand0 也是可选的,如果被省略,则被认为是 bool 类型的 true 值。 这一点是解答本题的关键。
  • CompareOperand0 的估值会从上到下从左到右和各个 CompareOperandListX 表达式列表中的各个case表达式逐个依次比较,来决定执行哪个分支的代码块。

因此,这个例子中会执行 case true 分支的代码,即打印 true。

Comments