Вопрос: Как работает range по slice и почему опасно брать адрес переменной цикла?

Go Junior Без компании
Вопрос: Как работает range по slice и почему опасно брать адрес переменной цикла?
Ответы
range копирует элемент в переменную цикла. Переменная одна на итерации (переиспользуется), поэтому &v указывает на одно и то же место. Плохой пример: ```go package main import "fmt" func main() { s := []int{10, 20, 30} ptrs := []*int{} for _, v := range s { ptrs = append(ptrs, &v) // ошибка: все адреса одинаковые } for _, p := range ptrs { fmt.Println(*p) } } ``` Правильно: ```go for i := range s { ptrs = append(ptrs, &s[i]) } ```