В Go нет классического объектно-ориентированного наследования и классов в традиционном понимании. Вместо этого Go использует композицию и интерфейсы.
Основные отличия:
public, private, protected, internal. В Go видимость определяется регистром первой буквы имени: верхний регистр - публичный, нижний регистр - приватный (в пределах пакета).Пример композиции в Go:
go
Пример реализации интерфейса в Go:
go
В таблице:
| Признак | Go | C# |
|---|---|---|
| Классы | Нет (есть структуры) | Да |
| Объекты | Экземпляры структур | Экземпляры классов |
| Наследование | Композиция, интерфейсы | Классическое (одиночное), интерфейсы |
| Интерфейсы | Неявная реализация | Явная реализация |
| Видимость | Регистр первой буквы | public, private, protected, и др. |
| Дженерики | С версии 1.18 | Да |
Подход Go к ООП более децентрализован и сфокусирован на поведении (через интерфейсы) и структуре данных (через встраивание), что часто приводит к более гибкому и легко тестируемому коду. C# придерживается более традиционной иерархической модели.