package collector import ( "sync" ) type Registry struct { collectors []Collector mutex sync.RWMutex } func NewRegistry() *Registry { return &Registry{ collectors: make([]Collector, 0), } } func (r *Registry) Register(collector Collector) { r.mutex.Lock() defer r.mutex.Unlock() r.collectors = append(r.collectors, collector) } func (r *Registry) GetCollectors() []Collector { r.mutex.RLock() defer r.mutex.RUnlock() result := make([]Collector, len(r.collectors)) copy(result, r.collectors) return result }