Какой вывод получит консоль при запуске программы №78

Вывод будет balance: 100.00. Метод add принимает копию customer, поэтому увеличение её balance не меняет usr.

Короткий ответ

Что ответить на собеседовании

Вывод будет 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 и несинхронизированного метода недостаточно: обычно нужны целые минимальные единицы и атомарность бизнес-операции.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее