clear în Go

Golește un map (șterge toate cheile) sau pune pe zero toate elementele unui slice, păstrând lungimea.

Sintaxă
func clear[T ~[]Type | ~map[Type]Type1](t T)

clear(m)   // map: șterge toate cheile
clear(s)   // slice: pune toate elementele pe valoarea zero

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.