packageconcurrentimport"context"// Executor replace go keyword to start a new goroutine// the goroutine should cancel itself if the context passed in has been cancelled// the goroutine started by the executor, is owned by the executor// we can cancel all executors owned by the executor just by stop the executor itself// however Executor interface does not Stop method, the one starting and owning executor// should use the concrete type of executor, instead of this interface.typeExecutorinterface{// Go starts a new goroutine controlled by the contextGo(handlerfunc(ctxcontext.Context))}