Поднятые методы в 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",
}
Выведите город через имя встроенного типа и его метод.