1package concurrent 2 3import "context" 4 5// Executor replace go keyword to start a new goroutine 6// the goroutine should cancel itself if the context passed in has been cancelled 7// the goroutine started by the executor, is owned by the executor 8// we can cancel all executors owned by the executor just by stop the executor itself 9// however Executor interface does not Stop method, the one starting and owning executor 10// should use the concrete type of executor, instead of this interface. 11type Executor interface { 12 // Go starts a new goroutine controlled by the context 13 Go(handler func(ctx context.Context)) 14} 15