💬 Что такое lvalue и rvalue в общем и в контексте Go?



🔹 lvalue (left value): в традиционном понимании, lvalue относится к выражению, которое ссылается на место в памяти, где хранится значение. В Go это может быть переменная, элемент массива, поле структуры или разыменованный указатель. Главное свойство lvalue заключается в том, что оно может находиться слева от оператора присваивания, то есть его можно использовать для присваивания или изменения значения.



📌 Пример:

var x int

x = 5 // 'x' здесь является lvalue, так как мы можем присвоить ему значение




🔹 rvalue (right value): rvalue, в свою очередь, обычно относится к данным, которые находятся справа от оператора присваивания. Это может быть литерал (например, число или строка), выражение, результат функции или любое значение, которое не имеет фиксированного места в памяти. В Go rvalue представляет значение, которое можно присвоить lvalue, но которое само по себе не может быть присвоено.



📌 Пример:

var y = x + 2 // 'x + 2' является rvalue, так как это выражение возвращает значение