четверг, 28 октября 2021 г.

Go для Java разработчиков: основные отличия Go

Объектно-ориентированное программирование

  • В 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. Однако не существует механизма для написания ваших собственных универсальных функций.

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


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

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