понедельник, 11 февраля 2019 г.

Go FAQ: Почему в Go нет ковариантных типов результатов?

Ковариантные типы результатов означают, что интерфейс

type Copyable interface {
    Copy() interface{}
}

будет удовлетворен методом

func (v Value) Copy() Value

потому что Value реализует пустой интерфейс. В методах Go типы должны точно совпадать, поэтому Value не реализует Copyable. Go отделяет понятие о том, что тип делает - его методы - от реализации типа. Если два метода возвращают разные типы, они не делают одно и то же. Программисты, которым нужны ковариантные типы результатов, часто пытаются выражать иерархию типов через интерфейсы. В Go более естественно иметь четкое разделение интерфейса и реализации.


Читайте также:


Комментариев нет:

Отправить комментарий