Conditions with if
| The if statement | |
| if-else chains | |
| If with initializer | |
| Guard clauses |
The if statement
The if statement runs a block only when its condition is true, and the condition needs no parentheses.
Keep conditions simple and put the opening brace on the same line, exactly as the compiler requires.
package main
import "fmt"
func main() {
age := 20
if age >= 18 {
fmt.Println("adult")
}
if age < 18 {
fmt.Println("minor")
}
}
go run .
adult
if-else chains
When several outcomes exclude each other, chain if with else if and finish with else for the fallback case.
Only the first block with a true condition runs, so order the checks from the most specific to the most general one.
package main
import "fmt"
func main() {
score := 85
if score >= 90 {
fmt.Println("excellent")
} else if score >= 70 {
fmt.Println("good")
} else {
fmt.Println("needs work")
}
}
go run .
good
If with initializer
An if statement can declare a short lived variable before the condition, separated by a semicolon.
The variable exists only inside the if and else blocks, which keeps the outer scope clean.
package main
import "fmt"
func main() {
if n := 7 % 2; n == 0 {
fmt.Println("even")
} else {
fmt.Println("odd")
}
}
go run .
odd
Guard clauses
A guard clause checks bad input first and returns early, so the main logic below stays flat and easy to read.
Prefer several small guards over one deeply nested condition whenever a function validates its arguments.
package main
import "fmt"
func check(age int) string {
if age < 0 {
return "age cannot be negative"
}
if age < 18 {
return "minor"
}
return "adult"
}
func main() {
fmt.Println(check(20))
fmt.Println(check(10))
fmt.Println(check(-1))
}
go run .
adult
minor
age cannot be negative
Next: switch
Article author: Arthur Isaev