În aplicațiile care procesează volume uriașe de date (cum ar fi indexarea de jurnale, compilatoare, servere DNS sau rutarea rețelelor), milioane de instanțe ale aceluiași șir de caractere (de exemplu coduri de țară, adrese IP sau etichete HTTP) sunt alocate repetat pe heap, irosind sute de megabytes de memorie RAM. Pachetul unique introdus în Go 1.23 oferă mecanismul oficial de Interning Canonic: garantează că există o singură copie în memorie pentru valori identice și returnează o referință ușoară (Handle).
Deduplicarea șirurilor și comparație O(1) cu unique.Make
package main
import (
"fmt"
"unique"
)
type AdresaIP string
func main() {
ip1 := "192.168.1.100"
ip2 := "192.168.1.100" // Poate proveni dintr-o altă alocare de buffer
// 1. Crearea mânerului canonic (Handle):
// Dacă valoarea există deja în tabela internă, 'unique.Make' returnează mânerul existent!
h1 := unique.Make(ip1)
h2 := unique.Make(ip2)
// 2. Comparație instantanee la viteza unui simplu pointer O(1):
// Nu mai compară caracterele unul câte unul! Compară doar adresa de memorie canonică:
if h1 == h2 {
fmt.Println("Adresele IP sunt identice (comparație O(1) de pointer)!")
}
// 3. Extragerea valorii originale:
valoareOriginala := h1.Value()
fmt.Printf("Valoare: %s
", valoareOriginala)
}