Let's view a small program:
package main
func foo() bool {
return false
}
func main() {
switch foo()
{
case false: println("False")
case true: println("True")
}
}
What is the output of the above program? Let's think for a while.
~
~
~
False
? No, it prints True
.
Surprised? Doesn't the function foo
always return false
?
Yes, the function foo
always returns false
, but this is unrelated here.
Compilers will automatically insert some semicolons for the above code as:
package main
func foo() bool {
return false;
};
func main() {
switch foo();
{
case false: println("False");
case true: println("True");
};
};
Now, it clearly shows that the switch
expression (true
) is omitted.
The switch
block is actually equivalent to:
switch foo(); true
{
case false: println("False");
case true: println("True");
};
That is why the program prints True
.
About detailed semicolon insertion rules, please read this article.