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

Цепочка вызовов в Go

Метод может вернуть получателя, и следующий вызов пишут сразу через точку. Так собирают короткую цепочку действий в одном выражении, не сохраняя промежуточное имя, когда каждый шаг возвращает тот же тип или указатель на него.

Метод вернет указатель на текущего пользователя, а следом вызовем чтение имени:

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

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

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

На экране "ann". Сначала выполняется Self, результат снова указатель на ту же структуру, и у него сразу берут Title. Порядок вызовов идет слева направо.

Цепочку имеет смысл строить, когда каждый метод возвращает значение, у которого есть нужный следующий метод. Если шаг только меняет поля и ничего не возвращает, следующий вызов через точку к нему не прицепить.

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

package main import "fmt" type User struct { Name string Age int } func (u *User) Self() *User { return u } func (u User) Title() string { return u.Name } u := &User{Name: "bob", Age: 30}

Выведите имя одной цепочкой: сначала метод, который возвращает указатель на получателя, затем чтение подписи.

Добавьте к User метод указателя, который увеличивает возраст и возвращает *User. Дважды вызовите его в цепочке и выведите возраст.

Можно ли продолжить цепочку точкой после метода, который ничего не возвращает?

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