Верните новое значение и присвойте его вызывающей переменной. Value receiver получает копию, поэтому изменение его самого не меняет исходный Number.
Как изменить значение без pointer receiver в Go
Верните новое значение и присвойте его вызывающей переменной. Value receiver получает копию, поэтому изменение его самого не меняет исходный Number.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Есть type Number int и func (n Number) Set(v Number) { n = v }. После n := Number(123); n.Set(456) значение не меняется. Как получить 456 без pointer receiver?
Ответ
Верните новое значение и присвойте его вызывающей переменной. Value receiver получает копию, поэтому изменение его самого не меняет исходный Number.
Например:
func (n Number) WithValue(v Number) Number { return v }
// Использование:
n := Number(123)
n = n.WithValue(456)
fmt.Println(n)
Такой контракт явно выражает создание нового значения. Для структур с map или slice внутри value receiver копирует заголовок, а не всё вложенное хранилище; это отдельный случай.