🟡 Средний · 2 очк. Структуры и методы
В чём опасность Point{1, 2} вместо Point{X: 1, Y: 2}?
A Нет разницы
B Добавление нового поля в структуру сломает код
C Хуже производительность
D Не работает с экспортированными полями
Объяснение вопроса

При позиционном литерале структуры порядок полей фиксирован. Если в тип Point добавят новое поле (например, Z int в начало или середину), компилятор сообщит об ошибке: не хватает значений для всех полей.

type Point struct { X, Y int }
p1 := Point{1, 2}       // OK
p2 := Point{X: 1, Y: 2} // OK

// После добавления Z int:
// Point{1, 2}   - ошибка компиляции
// Point{X: 1, Y: 2} - OK, Z получит 0

Рекомендация

Именованные литералы устойчивее к изменению структуры и читаются яснее. go vet предупреждает о позиционных литералах для типов из других пакетов.

🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.