Родительский контекст создан с тайм-аутом, и к моменту вызова runStep от него почти ничего не осталось. Внутри создаётся дочерний контекст с намного большим тайм-аутом и запускается таймер. Что напечатает программа и почему?
main.gogo
1packagemain23import(4"context"5"fmt"6"time"7)89funcrunStep(parentcontext.Context){10child,_:=context.WithTimeout(parent,30*time.Second)11t:=time.NewTimer(2*time.Second)1213select{14case<-child.Done():15fmt.Println("stopped by deadline")16case<-t.C:17fmt.Println("finished in time")18}19}2021funcmain(){22parent,_:=context.WithTimeout(context.Background(),5*time.Second)23time.Sleep(4900*time.Millisecond)24runStep(parent)25}
Сначала подумай без запуска — на собесе компилятора не будет.