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.
The Go 101 project is hosted on Github. Welcome to improve Go 101 articles by submitting corrections for all kinds of mistakes, such as typos, grammar errors, wording inaccuracies, description flaws, code bugs and broken links.
If you would like to learn some Go details and facts every serveral days, please follow Go 101's official Twitter account @zigo_101.
json.Unmarshal
function accepts case-insensitive object key matches