Ковариантные типы результатов означают, что интерфейс
type Copyable interface {
Copy() interface{}
}
будет удовлетворен методом
func (v Value) Copy() Value
потому что Value
реализует пустой интерфейс. В методах Go типы должны точно совпадать, поэтому Value
не реализует Copyable
. Go отделяет понятие о том, что тип делает - его методы - от реализации типа. Если два метода возвращают разные типы, они не делают одно и то же. Программисты, которым нужны ковариантные типы результатов, часто пытаются выражать иерархию типов через интерфейсы. В Go более естественно иметь четкое разделение интерфейса и реализации.
Читайте также:
- Go FAQ: Почему в Go нет наследования типов?
- Эффективный Go: интерфейсы, преобразования
- Основы Go: интерфейсы
Комментариев нет:
Отправить комментарий