TGViewer
defer panic defer panic @deferpanic · 3.02K subscribers
Post #198 2.58K
В Go 1.22 изменится поведение циклов

Собственно, уже сейчас новое поведение можно включить с помощью специального флага. Суть изменения заключается в том, что раньше происходил захват переменной в цикле. Если вы не знакомы с этим явлением, то вот вам пример:

var (
a = []int{1, 2, 3}
b []*int
)

for _, n := range a {
b = append(b, &n)
}

for _, n := range b {
fmt.Println(*n)
}

Что будет выведено программой? Конечно же, 3 3 3, а не 1 2 3. Так происходит, потому что та самая переменная n в цикле для экономии памяти не создаётся заново на каждой итерации, а по сути просто меняет свой указатель с одного места памяти на другое. Из-за чего и наблюдаем такой эффект. Это неочевидно для новичков и про это легко забыть. Чтобы этой проблемы избежать, обычно использовали некрасивый, но действенный трюк: внутри тела цикла объявляется новая переменная n, которой присваивается n:

for _, n := range a {
n := n
…
}

Что? Да!

Чтобы не кошмарить новых адептов, авторы языка и вводят новое поведение для циклов — такое, какое вы ожидали бы без захвата переменной.

С одной стороны это нарушение обещания авторов языка о сохранении обратной совместимости. С другой стороны эта особенность циклов и правда фрустрирует и сложно представить ситуацию, когда это пригодилось бы. Т.е. обратная совместимость вроде и сломана, но перестанет работать корректно критически маленькая доля программ, которые написаны как-то по-наркомански и скомпилированы через Go 1.22.

Такие дела ¯\_(ツ)_/¯

❤️ • ютуб • бусти • патреон • платный канал
  • 👍 21
  • 🔥 4
  • ⚡ 2
  • 🥱 2
  • 🤔 1
More from @deferpanic
  1. Aug 21, 2026Post #310
  2. Jul 25, 2026🦄 Опубликовал платформу для гайдов и первую статью https://golang.guide/ Надеюсь, вам пон…
  3. Jul 7, 2026Новость из немного другого мира: Эрин Катто, автор легендарного* физического движка Box2D,…
  4. Jun 24, 2026Я решил провести эксперимент и написать что-то на абсолютно незнакомом языке для абсолютно…
  5. Jun 11, 2026🥂Большой выпуск про PaaS — как Avito и Plata строят платформу для разработки / GoGetPodca…
  6. May 29, 2026⚙️ Лучшие практики в Go: разбираем на Podlodka Go Crew Пишете на Go и хотите узнать, как з…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →