Что это такое
Паттерн Prototype создаёт новые объекты, клонируя уже существующий, вместо того чтобы строить их с нуля. Вы готовите один объект как шаблон, затем копируете его и меняете только то, что отличается.
Главное, что нужно правильно сделать в Go: срезы и карты внутри структуры при обычном копировании остаются общими — правильный метод Clone() копирует и их, поэтому клон получается по-настоящему независимым.
Пример: шаблон документа
Шаблон содержит те части, которые повторяются в каждом документе. Clone() копирует его — вместе со срезом тегов — поэтому изменение копии не затрагивает шаблон.
Клонируйте, затем меняйте отличия
У отчёта появился новый заголовок и дополнительный тег, а в шаблоне по-прежнему только [черновик] — потому что Clone() скопировал срез, а не сделал его общим.
Вывод: программа на Go и захваченный вывод
package main
import "fmt"
type Document struct {
Title string
Footer string
Tags []string
}
// Clone копирует документ — включая срез внутри него.
func (d Document) Clone() Document {
c := d
c.Tags = append([]string{}, d.Tags...)
return c
}
func main() {
template := Document{
Title: "Без названия",
Footer: "PromptCookbook 2026",
Tags: []string{"черновик"},
}
report := template.Clone()
report.Title = "Годовой отчёт"
report.Tags = append(report.Tags, "финансы")
fmt.Println("шаблон:", template.Title, template.Tags)
fmt.Println("клон: ", report.Title, report.Tags)
}
Когда это применять
Применяйте, когда новые объекты — это в основном копии заранее подготовленного: документы из шаблона, игровые сущности из спавнера, тестовые данные из фикстуры.
Не применяйте, когда объекты дёшево создавать заново или когда в них нет ничего общего. Для плоской структуры из простых значений обычное присваивание в Go уже является копированием.
Плюсы и минусы
Плюсы: дешёвое создание заранее настроенных объектов; шаблон документирует значения по умолчанию; нет повторяющегося кода настройки.
Минусы: в глубоком копировании легко допустить незаметную ошибку — забытый срез или карта тихо связывают клон и оригинал; со временем клоны незаметно расходятся с шаблоном.