Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗goSpMtCh 10 of 280 menu
◀ ▶

Выбор получателя в Go

Получатель-значение годится, когда метод только читает, а указатель нужен, когда поля меняются. На одном типе часто сочетают оба варианта: легкие действия без записи и отдельные методы для обновления состояния.

Сначала выведем подпись без изменения возраста:

type User struct { Name string Age int } func (u User) Title() string { return u.Name }

Создадим значение и выведем подпись:

u := User{Name: "ann", Age: 20} fmt.Println(u.Title()) fmt.Println(u.Age)

После вызова возраст остался 20. Тот же тип дополним методом с указателем:

type User struct { Name string Age int } func (u User) Title() string { return u.Name } func (u *User) Birthday() { u.Age++ }

Создадим значение и вызовем метод с указателем:

u := User{Name: "ann", Age: 20} u.Birthday() fmt.Println(u.Age)

Теперь на экране 21. Оба метода живут рядом, но роль разная: один возвращает данные, другой меняет поле исходной переменной.

Дана структура:

package main import "fmt" type User struct { Name string Age int } u := User{Name: "bob", Age: 30}

Добавьте метод чтения имени с получателем-значением и метод увеличения возраста с указателем. Выведите имя, затем измените возраст и выведите его снова.

Дан тип Wallet с полем Balance. Запишите метод, который возвращает баланс без звездочки, и метод с указателем, который прибавляет 100. Проверьте, что баланс меняется только после второго.

Когда для метода, который меняет поле структуры, достаточно получателя-значения?

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить