Ce este
Modelul Prototype creează obiecte noi prin clonarea unuia existent, în loc să le construiască de la zero. Pregătești un obiect ca șablon, apoi îl copiezi și schimbi doar ceea ce diferă.
Lucrul de care trebuie să ții cont în Go: slice-urile și hărțile dintr-o structură sunt partajate de o copiere obișnuită — o metodă Clone() făcută corect le copiază și pe ele, așa că clona este cu adevărat independentă.
Exemplu: un șablon de document
Șablonul conține părțile care se repetă în fiecare document. Clone() îl copiază — inclusiv slice-ul de etichete — așa că modificarea copiei lasă șablonul neatins.
Clonează, apoi schimbă diferența
Raportul a primit un titlu nou și o etichetă în plus, iar șablonul are în continuare doar [ciornă] — pentru că Clone() a copiat slice-ul în loc să îl partajeze.
Ieșire: program Go și rezultatul capturat
package main
import "fmt"
type Document struct {
Title string
Footer string
Tags []string
}
// Clone copiază documentul — inclusiv slice-ul din interior.
func (d Document) Clone() Document {
c := d
c.Tags = append([]string{}, d.Tags...)
return c
}
func main() {
template := Document{
Title: "Fără titlu",
Footer: "PromptCookbook 2026",
Tags: []string{"ciornă"},
}
report := template.Clone()
report.Title = "Raport anual"
report.Tags = append(report.Tags, "finanțe")
fmt.Println("șablon:", template.Title, template.Tags)
fmt.Println("clonă: ", report.Title, report.Tags)
}
Când să îl folosești
Folosește-l când obiectele noi sunt în mare parte copii ale unuia pregătit dinainte — documente pornite de la un șablon, entități de joc create de un generator, date de test pornite de la un set fix.
Evită-l când obiectele se construiesc ieftin de la zero sau nu conțin nimic partajat. Pentru o structură simplă, cu valori obișnuite, atribuirea normală din Go este deja o copiere.
Avantaje și dezavantaje
Avantaje: creare ieftină a unor obiecte deja configurate; șablonul documentează valorile implicite; nu repeți codul de pregătire.
Dezavantaje: copierea în profunzime este ușor de greșit subtil — un slice sau o hartă uitată leagă pe tăcute clona de original; în timp, clonele se îndepărtează pe nesimțite de șablon.