Context & select Базовая работа с context и выбором select в Golang. package main import ( "context" "time" "github.com/juju/zaputil/zapctx" "go.uber.org/zap" ) type key struct{} func doWork(ctx context.Context) { logger := zapctx.Logger(ctx) logger.Info(ctx.Value(key{}).(string)) for { select { case <-ctx.Done(): logger.Info("ctx canceled") return default: logger.Info("Working") time.Sleep(time.Second) } } } func main() { ctx := context.Background() logger, _ := zap.NewProduction() logger = logger.With(zap.String("env", "prod")) logger.Info("Start app") logCtx := zapctx.WithLogger(ctx, logger) ctxLogWithValue := context.WithValue(logCtx, key{}, "iddqd") ctxTimeout, _ := context.WithTimeout(ctxLogWithValue, time.Second*5) doWork(ctxTimeout) ctxCancel, cancel := context.WithCancel(ctxLogWithValue) go doWork(ctxCancel) time.Sleep(time.Second * 6) cancel() }