Вывод будет balance: 100.00. Метод add принимает копию customer, поэтому увеличение её balance не меняет usr.
Какой вывод получит консоль при запуске программы №78
Вывод будет balance: 100.00. Метод add принимает копию customer, поэтому увеличение её balance не меняет usr.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Определите, какой текст появится в консоли после выполнения следующего Go‑кода.
package main
import "fmt"
type customer struct{
balance float64
}
func (cust customer) add(delta float64){
cust.balance += delta
}
func main() {
usr := customer{balance: 100.}
usr.add(50.)
fmt.Printf("balance: %.2f\n", usr.balance)
}
Ответ
Вывод будет balance: 100.00. Метод add принимает копию customer, поэтому увеличение её balance не меняет usr.
Получатель cust объявлен как customer, не *customer. Изменение поля действует только на локальную копию структуры.
Чтобы изменить оригинал, используйте func (cust *customer) add(delta float64) { cust.balance += delta }. Вызов usr.add(50) для адресуемой переменной останется таким же и даст 150.00. Для реального денежного баланса float64 и несинхронизированного метода недостаточно: обычно нужны целые минимальные единицы и атомарность бизнес-операции.