Ce face clear
clear se comportă diferit după tip. Pe un map șterge toate perechile: map-ul rămâne utilizabil, dar gol (len devine 0). Pe un slice nu schimbă lungimea, ci pune fiecare element pe valoarea zero a tipului (0, "", nil).
Pentru a goli un slice ca lungime, scrie s = s[:0] (păstrează memoria pentru append-uri viitoare). Pe un map sau slice nil, clear nu face nimic.
Parametri
| Parametru | Descriere |
|---|---|
t |
Un map sau un slice (sau un tip definit pe baza lor). |
Exemple
Exemplul 1: clear pe map și pe slice
package main
import "fmt"
func main() {
sesiuni := map[string]int{"ana": 3, "mihai": 1}
clear(sesiuni)
fmt.Println(sesiuni, len(sesiuni))
sesiuni["ioana"] = 1 // map-ul rămâne utilizabil
fmt.Println(sesiuni)
scoruri := []int{90, 75, 60}
clear(scoruri)
fmt.Println(scoruri, len(scoruri))
}
Rezultat
map[] 0
map[ioana:1]
[0 0 0] 3
Exemplul 2: Golirea ca lungime vs. clear
s[:0] păstrează capacitatea, dar nu șterge datele vechi din array; clear le pune pe zero.
package main
import "fmt"
func main() {
parole := []string{"abc", "123", "qwe"}
golit := parole[:0]
fmt.Println(len(golit), cap(golit), parole) // datele sunt încă în array
clear(parole) // le ștergem din memorie
fmt.Printf("%q\n", parole)
}
Rezultat
0 3 [abc 123 qwe]
["" "" ""]
Greșeli frecvente
- Așteptarea ca
clear(s)să facă slice-ul gol: lungimea rămâne aceeași, doar valorile devin zero. clearîn Go mai vechi de 1.21:undefined: clear.
Comenzi înrudite
delete: Șterge o cheie (și valoarea ei) dintr-un map; dacă cheia nu există sau map-ul este nil, nu face nimic.map și map-uri: Tabel cheie-valoare (dicționar): căutare rapidă după cheie, adăugare, ștergere și verificare cu v, ok.slice-uri: Lista dinamică din Go: o fereastră peste un array, cu lungime (len) și capacitate (cap), care crește cu append.