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

Valoare zero și conversii de tip

În Go, fiecare variabilă declarată fără o valoare explicită primește a valoare zero: „valoarea neutră” a tipului său. Este o diferență uriașă din JavaScript, unde let x; produce undefined sau C, unde terminați cu memoria gunoiului. Nu undefined, fără UB: doar zero.

Tabelul cu valori zero

CategoriaTipValoare zero
Numericint, int64, float32, float64, uint, ...0
Booleanboolfalse
Stringstring"" (șir gol)
Indicator*Tnil
Sețiune / Hartă / Canal[]T, map[K]V, chan Tnil
Funcție / Interfațăfunc(...), interface{...}nil
StructT struct{...}toate câmpurile la valoarea lor zero
Go
var i int        // 0
var f float64    // 0
var s string     // ""
var b bool       // false
var p *int       // nil
var nums []int   // nil  (NB: una slice nil ha len 0 e si può iterare!)

Conversiile sunt ÎNTOTDEAUNA explicite

Spre deosebire de C, Python sau JS, Go nu promovează automat unul tip numeric la altul: trebuie să scrieți type(value).

Go
i := 42
var f float64 = float64(i)
var u uint = uint(i)

Acest lucru este valabil chiar și pentru tipurile „compatibile” precum int și int64: un conversia explicită este întotdeauna necesară.

Go
var a int = 10
var b int64 = int64(a)  // obbligatorio

Conversie între cifre: ai grijă la trunchiere

Trecând de la float64 la int se trunchiază spre zero, nu rotund:

Go
f := 3.9
i := int(f)   // 3, non 4
n := int(-3.9) // -3, non -4

Conversie șir ↔ număr

string(65) NU dă "65": dă "A" (runa cu cod punctul 65). Pentru șir → număr și invers aveți nevoie de strconv pachet:

Go
import "strconv"

s := strconv.Itoa(42)        // "42"
n, err := strconv.Atoi("42") // 42, nil

Îl vom acoperi în profunzime în modulul Stdlib.

Rândul tău

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

Declarați un contor variabil de tip int fără a-l inițializa și imprimați-l. Așteptată: 0.

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

Fără un inițializator, variabila ia valoarea zero a tipului.

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

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

Având în vedere numărul întreg n=10, convertiți n în float64 și împărțiți la 4. Imprimați rezultatul (așteptată 2,5).

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

Fără conversia explicită, `n / 4` este o diviziune întreagă care dă 2.

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

Quiz#go.m1.l2.e3
Gata

Ce imprimă acest cod?

Go
f := 3.7
fmt.Println(int(f))
Opțiuni de răspuns

Recapitulare

  • Fiecare tip are o valoare zero consistentă: fără undefined, fără UB.
  • Slice/map/chan/func/interface/pointer au valoarea zero nil.
  • Conversiile numerice sunt întotdeauna explicite cu type(value).
  • int(float) trunchiază spre zero; pentru a rotunji folosiți math.Round.
  • Pentru șir ↔ număr utilizați pachetul strconv (NU o distribuție directă).