type Event … // Fire causes e to complete. It is safe to call multiple times, and // concurrently. It returns true iff this call to Fire caused the signaling // channel returned by Done to close. func (e *Event) Fire() bool { … } // Done returns a channel that will be closed when Fire is called. func (e *Event) Done() <-chan struct{ … } // HasFired returns true if Fire has been called. func (e *Event) HasFired() bool { … } // NewEvent returns a new, ready-to-use Event. func NewEvent() *Event { … }