Ответ
В Go нет встроенной поддержки триггеров как в SQL, но их можно эмулировать с помощью методов-наблюдателей или паттерна "наблюдатель". Например:
type Trigger func(old, new interface{})
type Observable struct {
value interface{}
triggers []Trigger
}
func (o *Observable) Set(value interface{}) {
old := o.value
o.value = value
// Вызываем все триггеры
for _, trigger := range o.triggers {
trigger(old, value)
}
}
func (o *Observable) AddTrigger(t Trigger) {
o.triggers = append(o.triggers, t)
}
Использование:
obj := Observable{}
obj.AddTrigger(func(old, new interface{}) {
fmt.Printf("Value changed from %v to %vn", old, new)
})
obj.Set(42) // Вызовет триггер
Для более сложных сценариев можно использовать event bus или готовые библиотеки типа github.com/asaskevich/EventBus.