
Баг: Забывать, что значения справа вычисляются ДО присваивания
Новички думают, что присваивание происходит последовательно слева направо. На самом деле Go сначала вычисляет все значения справа (по старым значениям переменных), а потом присваивает.
Пример непонимания:
a, b := 1, 2
a, b = a+1, b+1 // что будет?
// Правильно: сначала a+1=2, b+1=3, потом a=2, b=3Коварный пример:
a, b := 1, 2
a, b = b, a // обмен работает!
// Сначала вычисляется (b=2, a=1), потом a=2, b=1А вот что НЕ работает как ожидается:
a := 1
a, a = 2, 3 // ⚠️ что будет? a = 3
// Сначала вычисляется (2, 3), потом a получает последнее значение 3Go как бы делает фото всех значений справа, потом раздаёт их переменным слева
Загрузка...