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

Несколько методов в 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, не меняя исходное значение. Выведите оба результата для одной переменной.

Скажите, сколько методов можно объявить у одного типа, если имена не повторяются.

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