| 1234567891011121314151617181920212223242526272829 | package signalimport (	"sync"	"sync/atomic")type Once struct {	m    sync.Mutex	done uint32}func (o *Once) Do(f func()) {	if atomic.LoadUint32(&o.done) == 1 {		return	}	o.m.Lock()	defer o.m.Unlock()	if o.done == 0 {		atomic.StoreUint32(&o.done, 1)		f()	}}func (o *Once) Reset() {	o.m.Lock()	defer o.m.Unlock()	atomic.StoreUint32(&o.done, 0)}
 |