bool, true și false în Go

Tipul logic: are doar valorile true și false; rezultatul comparațiilor și al operatorilor &&, ||, !.

Sintaxă
var gata bool          // false
ok := true
rezultat := a && !b || c

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 { } cu n int: non-boolean condition in if statement.
  • if gata == true: corect, dar redundant; scrie if gata.
  • Inversarea ordinii în u.Activ && u != nil: verificarea nil trebuie 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.