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

Чтение и запись поля в Go

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

Для чтения хватит получателя-значения, для записи нужен указатель, иначе изменение останется в копии. Запишем оба метода у пользователя:

type User struct { Name string Age int } func (u User) Name() string { return u.Name } func (u *User) SetName(name string) { u.Name = name }

Создадим значение и вызовем оба метода:

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

Сначала на экране "ann", затем "amy". Вызов без звездочки у u для записи сработал, потому что переменная адресуемая и язык сам передает указатель методу с получателем *User.

Внутри метода чтения имя Name у метода и поле Name у структуры различаются по месту в объявлении: метод вызывают со скобками, поле читают через точку без них.

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

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

Добавьте метод чтения имени и метод записи имени с указателем. Смените имя на "ben" и выведите результат чтения.

Дан тип Score с полем Points. Запишите метод, который возвращает очки, и метод с указателем, который добавляет 10 к полю. Проверьте оба на одной переменной.

Почему для записи поля в этом приеме получатель записывают со звездочкой?

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