цикле:
func foobyval(n int) {
fmt.Println(n)
}
func main() {
for i := 0; i < 5; i++ {
go func() {
foobyval(i)
}()
}
time.Sleep(100 * time.Millisecond)
}
Почему передача происходит неявно через указатель(значение попадает в замыкание по указателю, то есть предполагается сразу что из-за замыкания его храним в куче?
Точнее нет типичный пример иной немного, но тут иной прикол
i присваивается и cуществует на уровне всего for, а не отдельного цикла
Похоже тут эвристика решает как захватывать by value или by reference на этапе компиляции
Слишком дорого делать аллокацию каждую итерацию потому что
https://go.dev/doc/faq#closures_and_goroutines
Обсуждают сегодня