Похоже, только поверхностно являются интерфейсами Go, такими как классы типов с одним параметром (классы-конструкторы) в Haskell.
- Методы связаны с типом интерфейса
- Объекты (определенные типы) могут иметь реализации этого интерфейса
Мне неясно, поддерживает ли Go каким-либо образом ограниченный полиморфизм через интерфейсы, что является основной целью классов типов. То есть в Haskell методы интерфейса могут использоваться в разных типах,
class I a where
put :: a -> IO ()
get :: IO a
instance I Int where
...
instance I Double where
....
Так что мой вопрос в том, поддерживает ли Go полиморфизм типов. Если нет, то они совсем не похожи на классы типов. И они на самом деле не сопоставимы.
Классы типов Haskell допускают мощное повторное использование кода с помощью «дженериков» - полиморфизма с более высоким родом - хороший справочник по межъязыковой поддержке таких форм дженерических программ - эта статья .
Специальный или ограниченный полиморфизм через классы типов хорошо описан здесь . Это основная цель классов типов в Haskell, и они не решаются через интерфейсы Go, то есть они на самом деле совсем не похожи. Интерфейсы строго менее мощные - своего рода класс нулевого порядка.