Что выведет код Middle Слайсы и мапы изнутри обновлено

Что выведет Go: удаление ключей во время range

Вопрос

Что выведет программа? Go 1.23, в go.mod указано go 1.23.

package main

import "fmt"

func main() {
    m := map[int]bool{}
    for i := range 10 {
        m[i] = true
    }
    for k := range m {
        if k%2 == 0 {
            delete(m, k)
        }
    }
    fmt.Println(len(m))
}

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: 5. Удалять ключи во время обхода мапы безопасно: удалённые ещё не посещённые ключи просто не встретятся.

Что выведет

5

Разбор

Удалять ключи во время обхода мапы безопасно: удалённые ещё не посещённые ключи просто не встретятся. Все чётные ключи от 0 до 8 удалены, осталось 5. Порядок обхода случайный, но результат от него не зависит. range 10 по целому работает с Go 1.22.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.