Указатель на переменную цикла в обёртке

Что выведетMiddleбесплатно01-t015

boxAll оборачивает элементы слайса в структуры box, сохраняя указатель на переменную цикла. Что выведет программа? Как гарантировать вывод a, b, c в любой версии Go?

main.gogo
1package main2 3import "fmt"4 5type elem struct{ name string }6type box struct{ elem *elem }7 8func (b *box) open() elem {9	return *b.elem10}11 12func (b *box) set(e *elem) {13	b.elem = e14}15 16func boxAll(items []elem) (result []*box) {17	for _, it := range items {18		bx := new(box)19		bx.set(&it)20		result = append(result, bx)21	}22	return result23}24 25func main() {26	items := []elem{27		{"a"},28		{"b"},29		{"c"},30	}31 32	boxes := boxAll(items)33	for _, bx := range boxes {34		fmt.Println(bx.open())35	}36}
Чем закончится программа?
Сначала подумай без запуска — на собесе компилятора не будет.