Что выведет код 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 ошибок.