| 1234567891011121314151617181920212223242526272829303132333435 | package signal// CancelSignal is a signal passed to goroutine, in order to cancel the goroutine on demand.type CancelSignal struct {	cancel chan struct{}	done   chan struct{}}// NewCloseSignal creates a new CancelSignal.func NewCloseSignal() *CancelSignal {	return &CancelSignal{		cancel: make(chan struct{}),		done:   make(chan struct{}),	}}// Cancel signals the goroutine to stop.func (this *CancelSignal) Cancel() {	close(this.cancel)}// WaitForCancel should be monitored by the goroutine for when to stop.func (this *CancelSignal) WaitForCancel() <-chan struct{} {	return this.cancel}// Done signals the caller that the goroutine has completely finished.func (this *CancelSignal) Done() {	close(this.done)}// WaitForDone is used by caller to wait for the goroutine finishes.func (this *CancelSignal) WaitForDone() <-chan struct{} {	return this.done}
 |