Salt la conținutul principal
Modulul 1 · Lecția 4 din 54/50 în curs~8 min
Lecții din modul (4/5)

Operatori

Go are operatorii clasici la care te-ai aștepta, cu câteva surprize: aritmetică, comparație, logic, pe biți. Fără operator ternar (a ? b : c), fără supraîncărcare, fără conversii implicite între tipuri. Simplitatea este o caracteristică.

Aritmetică

Go
a, b := 10, 3
fmt.Println(a + b)  // 13
fmt.Println(a - b)  // 7
fmt.Println(a * b)  // 30
fmt.Println(a / b)  // 3   ← divisione INTERA tra interi
fmt.Println(a % b)  // 1   ← resto (modulo)

Creșterea și decrementarea sunt Enunțuri, nu expresii

x++ și x-- nu produc o valoare: sunt „acțiuni” și nimic mai mult. Nu y := x++ ca în C.

Go
x := 5
x++          // ok: incrementa x
// y := x++  // ERRORE di compilazione
fmt.Println(x) // 6

Comparaţie

== != < <= > >= returnează bool. Se aplică numerelor și șirurilor de caractere; pentru structs TOATE câmpurile trebuie să fie comparabile (fără felii/hărți în interior).

Go
"abc" == "abc"  // true
"abc" < "abd"   // true (ordine lessicografico)
3 != 4           // true

Logic cu scurtcircuit

&&, ||, !. Ele scurtcircuita de la stânga la dreapta: dacă primul operand este suficient pentru a determina rezultatul, al doilea nu este egal evaluat.

Go
adult := age >= 18
seniorAdult := age >= 18 && age < 65

Pe bit

& AND, | SAU, ^ XOR, << shift la stânga, >> shift dreapta, IN_LINE_TECTED NU (putin clar). Sunt utile pentru steaguri, analiza binară și optimizări:

Go
flags := uint8(0b0000_0011)
flags |= 0b0000_0100   // imposta un bit:    0000_0111
flags &^= 0b0000_0010  // cancella un bit:   0000_0101
hasFlag := flags & 0b0000_0100 != 0  // true

Fără conversii implicite

1 + 1.5 în Go compilează, deoarece ambele sunt literale netipizate. Dar var i int = 1; i + 1.5 NU: aveți nevoie de float64(i) + 1.5.

Go
i := 1
f := 1.5
// i + f          // ERRORE
float64(i) + f    // 2.5

Rândul tău

Exercițiu#go.m1.l4.e1
Încercări: 0Se încarcă…

Calculați în rest restul împărțirii a 17 la 5 și imprimați-l. Așteptată: 2.

Se încarcă editorul...
Afișează indiciu

Operatorul modulo este `%`.

Soluție disponibilă după 3 încercări

Exercițiu#go.m1.l4.e2
Încercări: 0Se încarcă…

Tipăriți true dacă vârsta este între 18 și 65 de ani inclusiv, false în caz contrar.

Se încarcă editorul...
Afișează indiciu

Combinați două comparații cu `&&`.

Soluție disponibilă după 3 încercări

Quiz#go.m1.l4.e3
Gata

Ce imprimă acest cod?

Go
a, b := 7, 2
fmt.Println(a/b, a%b)
Opțiuni de răspuns

Recapitulare

  • Aritmetica clasica; / între int este diviziunea întregului (trunchiază).
  • ++ și -- sunt instrucțiuni, nu expresii: nu y := x++.
  • Operatorii de comparație și logici produc bool; &&/|| scurtcircuit.
  • Bitwise & | ^ << >> &^ pentru steaguri și analiza binară.
  • Fără conversii implicite între diferite tipuri: utilizați type(x).