Несколько методов в Go
У одного типа может быть несколько методов, у каждого свое имя. Все они привязаны к одному объявлению структуры или своего типа и дополняют его разными действиями. Получатель может быть одинаковым по форме, но логика в каждом методе своя.
Добавим к пользователю подпись и проверку совершеннолетия:
type User struct {
Name string
Age int
}
func (u User) Title() string {
return u.Name
}
func (u User) Adult() bool {
return u.Age >= 18
}
Создадим значение и вызовем оба метода:
u := User{Name: "ann", Age: 20}
fmt.Println(u.Title())
fmt.Println(u.Adult())
Оба вызова идут через одну переменную u.
Компилятор выбирает метод по имени после
точки. Методы не мешают друг другу, пока
имена различаются.
Новый метод можно добавить в любой момент рядом с типом. Старые вызовы не ломаются, если их сигнатуры не меняли. Так тип постепенно обрастает действиями, которые удобно читать вместе с данными.
Дана структура:
package main
import "fmt"
type User struct {
Name string
Age int
}
u := User{Name: "bob", Age: 16}
Добавьте два метода: один возвращает имя,
второй сообщает, есть ли 18 лет или
больше. Выведите оба результата.
Объявите тип Counter с полем Value
типа int. Запишите метод, который
возвращает поле, и метод, который возвращает
поле, увеличенное на 1, не меняя
исходное значение. Выведите оба результата
для одной переменной.
Скажите, сколько методов можно объявить у одного типа, если имена не повторяются.