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

Поднятые методы в Go

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

Запишем метод подписи для адреса и вызовем его у пользователя:

package main import "fmt" type Address struct { City string } func (a Address) Label() string { return a.City } type User struct { Address Name string } func main() { u := User{ Address: Address{City: "oslo"}, Name: "ann", } fmt.Println(u.Label()) }

На экране "oslo". Внутренний метод Label сработал для встроенного адреса внутри u. Полный путь через имя типа тоже возможен, если нужно явно указать внутреннюю часть.

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

Дан следующий код:

package main import "fmt" type Address struct { City string } func (a Address) Label() string { return a.City } type User struct { Address Name string } u := User{ Address: Address{City: "oslo"}, Name: "ann", }

Выведите результат поднятого метода у u.

Объявите Address с полем City, метод, который возвращает город, встройте тип в User с полем Name. Создайте значение и выведите результат метода через внешнюю переменную.

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

package main import "fmt" type Address struct { City string } func (a Address) Label() string { return a.City } type User struct { Address Name string } u := User{ Address: Address{City: "berlin"}, Name: "mia", }

Выведите город через имя встроенного типа и его метод.

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