Объектно-ориентированное программирование
- В Go нет классов с конструкторами. Вместо методов экземпляра, иерархии наследования классов и поиска динамических методов Go предоставляет структуры и интерфейсы.
- Go позволяет использовать методы любого типа; упаковка не требуется. Получатель метода, который соответствует this в Java, может быть прямым значением или указателем.
- Go предоставляет два уровня доступа, аналогичные public и package-private в Java. Объявления верхнего уровня являются общедоступными, если их имена начинаются с заглавной буквы, в противном случае они являются частными для пакета.
Функциональное программирование
- Функции в Go - это объекты первого класса. Значения функций могут использоваться и передаваться так же, как и другие значения, а функциональные литералы могут относиться к переменным, определенным во включающей функции.
Указатели и ссылки
- Go предлагает указатели на значения всех типов, а не только на объекты и массивы. Для любого типа T существует соответствующий тип указателя *T, обозначающий указатели на значения типа T.
- Go использует nil для недопустимых указателей, где Java использует null.
- Массивы в Go - это значения. Когда массив используется в качестве параметра функции, функция получает копию массива, а не указатель на нее. Однако на практике функции часто используют срезы для параметров; срезы - это ссылки на базовые массивы.
- Определенные типы (карты, срезы и каналы) передаются по ссылке, а не по значению. То есть передача карты функции не копирует карту; если функция изменяет карту, вызывающий абонент увидит это изменение. В терминах Java это можно рассматривать как ссылку на карту.
Встроенные типы
- Строки предоставляются языком; строка ведет себя как срез байтов, но является неизменной.
- Хэш-таблицы предоставляются языком. Их называют картами.
Обработка ошибок
- Вместо исключений Go использует ошибки для обозначения событий, таких как конец файла, и паники во время выполнения для ошибок времени выполнения, таких как попытка индексирования массива за пределами границ.
Конкурентность
- Отдельные потоки выполнения, горутины и каналы связи между ними, каналы, предоставляются языком.
Отсутствующие функции
- Go не поддерживает неявное преобразование типов. Операции, сочетающие разные типы, требуют явного преобразования. Вместо этого Go предлагает нетипизированные числовые константы без ограничений.
- Go не поддерживает перегрузку функций. Функции и методы в одной области должны иметь уникальные имена.
- Go имеет несколько встроенных универсальных типов данных, таких как срезы и карты, а также универсальные функции, такие как append и copy. Однако не существует механизма для написания ваших собственных универсальных функций.
Читайте также:
- Go для Java разработчиков: Hello world пример
- Разработка RESTful API с помощью Go и Gin
- Как писать Go код (с использованием модулей)
Комментариев нет:
Отправить комментарий