|
Общее позиционирование
|
Объектно-ориентированный язык на платформе JVM, с богатой экосистемой, безопасностью типов и огромным количеством библиотек. Используется для корпоративных приложений, банковских систем, Android, микросервисов.
|
Компилируемый язык Google, ориентированный на простоту, скорость компиляции и безопасную конкурентность. Используется для микросервисов, DevOps-инструментов, сетевых сервисов.
|
|
Парадигма
|
Классическое ООП + Generics + функциональные элементы (Stream API, lambda).
|
Императивная и структурная модель + композиция вместо наследования, функции первого класса, встроенные generics (с 1.18).
|
|
Пример «Hello World»
|
public class App { public static void main(String[] args) { System.out.println("Hello, World"); } }
|
package main import "fmt" func main() { fmt.Println("Hello, World") }
|
|
Структура проекта
|
Каталоги = пакеты; требуется src/main/java и класс-точка входа.
|
Файлы сгруппированы по package; запуск с func main(); структура произвольная, главное — корректный пакет main.
|
|
Компиляция и запуск
|
Двухэтапно: javac App.java → java App; байткод для JVM.
|
Одним шагом: go run app.go (или go build → исполняемый бинарник).
|
|
Типизация
|
Статическая, строгая; возможен вывод типа с var x = 10 (с Java 10).
|
Статическая, строгая; короткое объявление x := 10 с автоматическим выводом типа.
|
|
Переменные и константы
|
int x = 10; final double PI = 3.14;
|
var x int = 10; const PI = 3.14; const ( A = iota; B = iota )
|
|
Нулевые значения
|
null для ссылочных; примитивы инициализируются по умолчанию (0, false).
|
У всех типов есть нулевое значение: 0, false, "", nil (для указателей, срезов, карт, каналов).
|
|
Классы и объекты
|
Классы, наследование (extends), интерфейсы (implements), абстрактные классы.
|
Классов нет; есть struct (структуры данных) и методы на типах. Наследование заменено встраиванием (embedding).
|
|
Интерфейсы
|
Явная реализация: class A implements I.
|
Неявная реализация: тип реализует интерфейс, если содержит все его методы.
|
|
ООП и композиция
|
Поддержка инкапсуляции, наследования, полиморфизма.
|
Композиция и интерфейсы вместо наследования; чистое встраивание.
|
|
Генерики
|
Есть (с Java 5); стираются при компиляции (type erasure).
|
Полноценные generics с Go 1.18; тип-параметры компилируются без стирания.
|
|
Функции / методы
|
Методы только внутри классов; возвращают одно значение; анонимные lambdas.
|
Функции вне классов; могут возвращать несколько значений: return val, err; поддерживаются анонимные.
|
|
Обработка ошибок
|
Исключения — try / catch / finally / throw; есть checked и unchecked.
|
Ошибки — обычные значения типа error; проверяются явно if err != nil; panic / recover для крайних случаев.
|
|
Управление потоком
|
if / else, for, while, do while, switch (требует break), тернарный ?:.
|
Только for; нет while; if без скобок; switch без break; нет тернарного оператора; есть defer (отложенное выполнение).
|
|
Коллекции и массивы
|
ArrayList, HashMap, HashSet, Stream API.
|
Встроенные slice (динамический массив), map (хэш-таблица).
|
|
Память
|
Автоматический GC, ссылки, нет указателей.
|
GC + указатели без арифметики (*p, &x); new и make для создания объектов и контейнеров.
|
|
Асинхронность и многопоточность
|
Потоки (Thread, ExecutorService, CompletableFuture); синхронизация через lock, volatile.
|
Горoutines (go func()) — лёгкие зелёные потоки; каналы (chan) для синхронизации; select для мультиплексирования.
|
|
Пример конкурентности
|
new Thread(() -> System.out.println("hi")).start();
|
go fmt.Println("hi")
|
|
Работа с файлами
|
Через java.io или java.nio API.
|
Через пакет os и io; пример: f, _ := os.Open("a.txt"); defer f.Close().
|
|
Модули / зависимости
|
Maven / Gradle (pom.xml, build.gradle).
|
Встроенный go mod init module; go get pkg; всё управляется через Cargo-подобный механизм.
|
|
Тестирование
|
JUnit, TestNG, Mockito, Spring Test, Cucumber.
|
Встроенный go test; testing пакет; моки через testify, gomock.
|
|
Сборка / деплой
|
Байткод → JAR/WAR; JVM нужна везде.
|
Компиляция в нативный бинарь (go build); без внешних зависимостей.
|
|
Документация
|
Javadoc, автоматическая генерация HTML.
|
godoc, док-комментарии начинаются с имени функции.
|
|
Логирование
|
SLF4J, Log4j, Logback.
|
Стандарт log, или zap, zerolog, logrus.
|
|
Фреймворки / Web
|
Spring Boot, Jakarta EE, Micronaut, Quarkus.
|
Gin, Echo, Fiber, Chi — аналог Spring Boot; всё минималистично.
|
|
ORM и БД
|
Hibernate / JPA, MyBatis, Spring Data.
|
GORM (for Go), Ent, sqlx, gorm.io; работа с SQL через пакет database/sql.
|
|
Безопасность / JWT
|
Spring Security, Shiro, Keycloak.
|
jwt-go, goth, authboss — middleware для аутентификации и OAuth.
|
|
Документирование API
|
Swagger (OpenAPI через springdoc).
|
swaggo/swag, go-swagger — генерация документации из комментариев.
|
|
Тестовые контейнеры / инфраструктура
|
Testcontainers Java, Docker Compose.
|
Testcontainers-go, dockertest — аналогичные решения.
|
|
Сборка / CI/CD
|
Maven/Gradle + Jenkins/GitLab CI + Docker Image.
|
go build + GitHub Actions/GitLab CI + Docker (Go легко контейнеризуется).
|
|
Производительность
|
JVM с JIT — высокая, но старт медленнее; GC сложнее настроить.
|
Быстрая компиляция в нативный код; низкая задержка; легкие потоки.
|
|
Размер программы
|
JAR + JVM → десятки МБ.
|
Один бинарник (несколько МБ).
|
|
Стандартная библиотека
|
Очень широкая: коллекции, XML/JSON, crypto, NIO, HTTP, JDBC.
|
Компактная, но достаточная: HTTP-сервер, JSON, crypto, regexp, I/O, OS, net.
|
|
Подход к ошибкам и контролю потока
|
Исключения скрывают контроль потока; ошибки всплывают вверх по стэку.
|
Ошибки явные; нет скрытых try/catch; простая логика обработки.
|
|
Стиль и философия
|
«Enterprise-подход»: гибкость, много абстракций, аннотации, framework-driven.
|
«Simplicity first»: минимум ключевых слов, всё явно, компилятор — гарантия стабильности.
|
|
Подходит для
|
Банковских систем, ERP, Android, микросервисов, бэкендов с богатыми библиотеками.
|
Высоконагруженных REST-сервисов, DevOps-инструментов (Docker, K8s), backend микросервисов.
|
|
Крупные проекты
|
Spring Boot, Kafka, Elasticsearch, Hadoop.
|
Docker, Kubernetes, Terraform, Prometheus, Etcd.
|
|
Сообщество и поддержка
|
Старейшее, огромное, огромный выбор фреймворков.
|
Быстро растущее, поддержка от Google и Cloud-компаний.
|
|
Ключевые отличия
|
Более «тяжёлый» и гибкий, много абстракций, но богатая экосистема.
|
Компактный и жёсткий язык без магии, предсказуемый runtime, лёгкая параллельность.
|