Интерфейсы в Go представляют собой одну из отличительных особенностей языка, формирующих способ решения задач. При схожести с интерфейсами в других языках, интерфейсы Go всё же имеют важные отличия и это поначалу приводит к избыточному переиспользованию интерфейсов и путанице в том, как и когда их использовать. Это нормально, но давайте попробуем разобраться, в чем же особенность интерфейсов в Go, как они устроены, почему так важны и что значит ортогональность интерфейсных типов и структурных типов в Go. В этой статье вы узнаете:
* в чем отличие от интерфейсов в Java
* важные и неочевидные последствия этих отличий
* как устроены интерфейсы под капотом
* вспомним про пустой интерфейс (interface\{\})
* затронем сакральную тему про дженерики
* разберемся, кто и зачем должен создавать интерфейс
* и постараемся научиться не абьюзить интерфейсы и начать жить
![Header][1] _([artwork by Svitlana Agudova][2])_ [Читать дальше →][3]
[1]:
https://habrastorage.org/files/ac1/5db/b35/ac15dbb350f1475ba76ac01b3b66afdc.png
[2]:
http://agudova.com/portfolio/for-golang-community/
[3]:
https://habrahabr.ru/post/276981/#habracut