Что выведет код Junior context обновлено
Что выведет Go: ошибки контекста после отмены
Вопрос
Что выведет программа? Go 1.23, в go.mod указано go 1.23. Каждую строку вывода пишите с новой строки.
package main
import (
"context"
"errors"
"fmt"
"time"
)
func main() {
parent, cancel := context.WithCancel(context.Background())
child, cancelChild := context.WithTimeout(parent, time.Hour)
defer cancelChild()
fmt.Println(child.Err())
cancel()
<-child.Done()
fmt.Println(parent.Err(), child.Err())
fmt.Println(errors.Is(child.Err(), context.Canceled))
}
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: <nil>, context canceled context canceled, true. До отмены Err возвращает nil.
Что выведет
<nil>
context canceled context canceled
true
Разбор
До отмены Err возвращает nil. Отмена родителя распространяется на потомка, хотя его собственный таймаут ещё не истёк, поэтому у обоих context.Canceled, а не DeadlineExceeded.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.