type Student struct {
Name string
Age int
}
func main() {
data := make([]*Student, 0)
src := []Student{
Student{Name: "allen", Age: 30},
Student{Name: "tom", Age: 33},
}
for _, m := range src {
data = append(data, &m) // notice point!!!
}
for _, s := range data {
fmt.Println(*s)
}
}
Почему этот фрагмент кода работает в Go? Вывод немного отличается от ожидаемого, который ниже.
{tom 33}
{tom 33}
вместо
{allen 30}
{tom 33}
Я нашел объяснение, что m
является фиксированным указателем, таким образом каждый раз append(data,&m)
просто добавляет адрес m
, который остается неизменным во время итераций.
Однако, согласно этому объяснению, m
, похоже, имеет *Student
, поэтому &m
имеет **Student
, но как можно добавить значение (&m
) **Student
в массив []*Student
?