Ce face bool, true și false
bool are două valori: true și false; valoarea zero este false. Comparațiile (==, !=, <, >=…) dau un bool, iar if, for și switch fără expresie au nevoie de o condiție bool.
Operatorii logici sunt && (și), || (sau) și ! (negație). && și || se evaluează scurtcircuitat: dacă rezultatul se știe după partea stângă, partea dreaptă nu se mai calculează, deci p != nil && p.Activ este sigur.
Go nu convertește alte tipuri în bool: if n sau bool(1) nu compilează. Din text se convertește cu strconv.ParseBool, iar %t îl afișează cu Printf.
Exemple
Exemplul 1: Condiții compuse
package main
import "fmt"
func main() {
varsta := 19
arePermis := true
areMasina := false
poateConduce := varsta >= 18 && arePermis
fmt.Println("poate conduce:", poateConduce)
fmt.Println("are nevoie de taxi:", !areMasina || !poateConduce)
fmt.Printf("%t %v\n", areMasina, 3 > 2)
}
Rezultat
poate conduce: true
are nevoie de taxi: true
false true
Exemplul 2: Evaluarea scurtcircuitată
La nil, partea dreaptă nu se mai evaluează, deci nu apare panic.
package main
import (
"fmt"
"strconv"
)
type Utilizator struct{ Activ bool }
func main() {
var u *Utilizator
fmt.Println("activ:", u != nil && u.Activ)
u = &Utilizator{Activ: true}
fmt.Println("activ:", u != nil && u.Activ)
b, err := strconv.ParseBool("true")
fmt.Println(b, err)
}
Rezultat
activ: false
activ: true
true <nil>
Greșeli frecvente
if n { }cun int:non-boolean condition in if statement.if gata == true: corect, dar redundant; scrieif gata.- Inversarea ordinii în
u.Activ && u != nil: verificareaniltrebuie să fie prima.
Comenzi înrudite
if și else: Execută un bloc de cod doar dacă o condiție este adevărată; else tratează cazul contrar.tipuri de bază: Tipurile simple din Go: bool, string, întregi cu și fără semn, numere reale, complexe, byte și rune.zero values (valori zero): Orice variabilă fără valoare inițială primește valoarea zero a tipului: 0, „”, false sau nil.