TGViewer
Go tests Go tests @golangtests · 7.82K subscribers
Post #758 2.86K
👣 Что выведет следующий код?

go 
package main
import (
"fmt"
)

func main() {
funcs := []func(){}

for i := 0; i < 3; i++ {
funcs = append(funcs, func() {
fmt.Println(i)
})
}

for _, f := range funcs {
f()
}
}


❓ Варианты:

A)0 1 2
B)3 3 3
C) Паника на runtime
D) 0 0 0

💡 Пиши свой ответ в комментариях, и объясни почему!

✅ Правильный ответ: 😎

🔍 Почему так происходит:
В этом коде создаётся срез из замыканий, и каждый func() внутри цикла ссылается на одну и ту же переменную i.

Ключевой момент: i не копируется при каждой итерации цикла, а продолжает изменяться, и все функции “запоминают” ссылку на одну и ту же i, а не её значение на момент создания.

К моменту вызова всех функций (f() в конце) цикл уже завершён, и значение i стало 3.

👉 Поэтому каждая функция выводит 3, а не 0, 1, 2.



@golangtests
  • 🤬 13
  • 👍 11
  • ❤ 3
  • 🔥 3
  • 🤔 1
More from @golangtests
  1. Sep 26, 2026Nil-интерфейс в Go: почему err == nil выдаёт false? Nil-интерфейс в Go ломает даже опытных…
  2. Sep 23, 2026Задача по Go: `select` и побочные эффекты Что выведет программа? package main import "fmt"…
  3. Sep 23, 2026Не застревайте в прошлом — учитесь новым навыкам и ИИ Чтобы успевать за требованиями рынка…
  4. Sep 13, 2026👣 Задача на Go 1.27: concurrent job scheduler с generic methods Нужно реализовать библиот…
  5. Sep 13, 2026🔥 Хочешь расти в IT быстрее остальных? Перестань учиться в одиночку Можно годами смотреть…
  6. Sep 2, 2026👣 Go 1.27: почему две разные closure внезапно могут иметь одинаковый адрес функции? Что в…
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 →