1.8 KiB
The control structures of Go are related to those of C but differ in important ways. There is no do
or while
loop, only a slightly generalized for
; switch
is more flexible; if
and switch
accept an optional initialization statement like that of for
; break
and continue
statements take an optional label to identify what to break or continue; and there are new control structures including a type switch and a multiway communications multiplexer, select
. The syntax is also slightly different: there are no parentheses and the bodies must always be brace-delimited.
If
In Go a simple if
looks like this:
if x > 0 {
return y
}
Mandatory braces encourage writing simple if
statements on multiple lines. It's good style to do so anyway, especially when the body contains a control statement such as a return
or break
.
Since if
and switch
accept an initialization statement, it's common to see one used to set up a local variable.
if err := file.Chmod(0664); err != nil {
log.Print(err)
return err
}
In the Go libraries, you'll find that when
an if
statement doesn't flow into the next statement — that is, the body ends in break
, continue
, goto
, or return
— the unnecessary else is omitted.
f, err := os.Open(name)
if err != nil {
return err
}
codeUsing(f)
This is an example of a common situation where code must guard against a sequence of error conditions. The code reads well if the successful flow of control runs down the page, eliminating error cases as they arise. Since error cases tend to end in return statements, the resulting code needs no else statements.
f, err := os.Open(name)
if err != nil {
return err
}
d, err := f.Stat()
if err != nil {
f.Close()
return err
}
codeUsing(f, d)