TG Telegram Group & Channel
Go tests | United States America (US)
Create: Update:

👣 Что выведет следующий код?

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

👣 Что выведет следующий код?

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
Please open Telegram to view this post
VIEW IN TELEGRAM


>>Click here to continue<<

Go tests




Share with your best friend
VIEW MORE

United States America Popular Telegram Group (US)