Search code examples
gogoland

why strict code format on keywords in go lang


As every new programer starting in Go 1st think you see is, strict code format. Means:

//Valid
func foo(){
}

//Invalid
func foo()
{
}

Same goes for if-else that else should be in same line where if ends, like:

//Valid
if{
}else{
}

//Invalid
if{
}
else{
}

we get below error:

syntax error: unexpected else, expecting }

I have checked the spec spec, but not able to find why.

The only explanation I'am getting is its mandatory.

Can anyone explain us why this is mandated does this have any reason? if any.

UPDATE
I think i have mention this already that "I know lang say so", Question is WHY? Why to go this length to make it compile time error, what problems it was posing if we don't do this?


Solution

  • The language was designed as such and the reason is outlined in the FAQ.

    https://golang.org/doc/faq

    Why are there braces but no semicolons? And why can't I put the opening brace on the next line?

    o uses brace brackets for statement grouping, a syntax familiar to programmers who have worked with any language in the C family. Semicolons, however, are for parsers, not for people, and we wanted to eliminate them as much as possible. To achieve this goal, Go borrows a trick from BCPL: the semicolons that separate statements are in the formal grammar but are injected automatically, without lookahead, by the lexer at the end of any line that could be the end of a statement. This works very well in practice but has the effect that it forces a brace style. For instance, the opening brace of a function cannot appear on a line by itself.

    Some have argued that the lexer should do lookahead to permit the brace to live on the next line. We disagree. Since Go code is meant to be formatted automatically by gofmt, some style must be chosen. That style may differ from what you've used in C or Java, but Go is a different language and gofmt's style is as good as any other. More important—much more important—the advantages of a single, programmatically mandated format for all Go programs greatly outweigh any perceived disadvantages of the particular style. Note too that Go's style means that an interactive implementation of Go can use the standard syntax one line at a time without special rules.