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

Метод своего типа в Go

Метод можно повесить не только на структуру, но и на новый тип поверх числа. Запись type Celsius float64 создает отдельный тип, а не просто другое имя для float64. К такому типу привязывают методы так же, как к структуре.

Сделаем подпись для температуры:

import "fmt" type Celsius float64 func (c Celsius) Label() string { return fmt.Sprintf("%.1f C", float64(c)) }

Создадим значение и выведем подпись:

t := Celsius(36.6) fmt.Println(t.Label())

На экране текст с числом и буквой C. Внутри метода значение c имеет тип Celsius, а для форматирования его приводят к float64. Вызов снова идет через точку после переменной.

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

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

package main import "fmt" type Percent int p := Percent(50)

Добавьте метод, который возвращает текст "half", если значение равно 50, и "other" иначе, и выведите вызов.

Объявите тип Code поверх int, метод, который возвращает число как строку через fmt.Sprint, создайте значение 7 и выведите результат.

Чем запись type Celsius float64 отличается от псевдонима типа в этом учебнике?

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