Метод своего типа в 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 отличается
от псевдонима типа в этом учебнике?