context.WithCancel
возвращает два связанныхними объектов, CTX и отменить, отменить вызовчтобы послать нулевой STRUCT CTX, CTX раз получая объект для завершения выполнения goroutine;
CTX потокобезопасен, он может одновременно передаваться к множеству goroutine, запуская отменить, отменить выполнение всех goroutine
пакет основной импорт ( " контекст " " FMT " " время " ) Func TestContext () { CTX, отмена: = context.WithCancel (context.Background ()) идут d1 (CTX) идти d2 (CTX) time.Sleep ( 7 * time.Second) отменить () } FUNC d1 (CTX context.Context) { я: = 0 для { time.Sleep ( 1 * time.Second) я ++ выберите { случай <-ctx.Done (): fmt.Println ( " d1 над " ) возвращаемое значение по умолчанию : fmt.Println ( " d1 " , я) } } } FUNC d2 (CTX context.Context) { fmt.Println ( " d2 начать " ) < - ctx.Done () fmt.Println ( " d2 над " ) } функ Основной () { TestContext () fmt.Println ( " Основной над " ) }
экспорт
d2 начать d1 1 d1 2 d1 3 d1 4 d1 5 d1 6 магистраль над