TGViewer
YeaHub Tech YeaHub Tech @yeahub_tech · 412 subscribers
Post #304 117
#Go

🔖 Почему Go-разработчик пишет код, который Java-девелопер считает "странным"?

Вы Java-разработчик, начали писать на Go и всё кажется странным: нет try-catch, нет наследования, строчные буквы для приватности, можно вызвать метод у nil. Go — это не Java, это другая парадигма. Явность вместо магии, композиция вместо наследования, ошибки как значения вместо исключений.

// Плохо (по Go стандартам) - Java способ обработки ошибок
try {
String raw = Files.readString(Path.of("cfg.json"));
Config cfg = mapper.readValue(raw, Config.class);
return cfg;
} catch (IOException ex) {
throw new IllegalStateException("cannot init config", ex);
}

// Хорошо (Go способ) - явная проверка каждой ошибки
raw, err := os.ReadFile("cfg.json")
if err != nil {
return nil, fmt.Errorf("read cfg: %w", err)
}
var cfg Config
if err := json.Unmarshal(raw, &cfg); err != nil {
return nil, fmt.Errorf("parse cfg: %w", err)
}
return &cfg, nil


📎 Основные различия Go от Java:

🔸 Нет исключений (try-catch), ошибки — это значения (if err != nil)
🔸 Приватность через заглавность букв (Public vs private), не через модификаторы
🔸 Нет наследования, только композиция и интерфейсы
🔸 Интерфейсы неявные — не нужно писать implements

Go философия: явность над неявностью, простота над магией. Кода больше, но всё понятно. Нет аннотаций, нет DI фреймворков, нет магических прокси и рефлексии за кулисами. Вы видите, что происходит.

Два ключевых отличия:

// 1. ЯВНАЯ ОБРАБОТКА ОШИБОК - видите каждый шаг
tx, err := db.BeginTx(ctx, nil)
if err != nil {
return fmt.Errorf("begin tx: %w", err)
}
defer tx.Rollback()

// 2. ПРИВАТНОСТЬ ЧЕРЕЗ БУКВУ - заглавная = public, строчная = private
type PaymentGateway interface { // Public
Charge(ctx context.Context) error
}
func (s *stripe) charge(ctx context.Context) error { // private method
// ...
}


✅ Go хорош для:
- Микросервисов и бекенда (явность, производительность)
- Когда нужна скорость разработки и чистота кода
- Когда нет необходимости в сложных абстракциях на старте
- Когда важна читаемость и простота отладки

❌ Привыкайте к:
- Повторению проверок ошибок (if err != nil много раз)
- Коротким названиям переменных (ctx, err, db, u, p)
- Отсутствию try-catch блоков (это норма)
- Приватности через буквы, а не ключевые слова
- Явным транзакциям и управлению ресурсами

Go требует переучивания мышления. Java — "дайте мне абстракции и автоматику". Go — "вот инструменты, делайте сами, но явно". Один раз адаптируетесь — полюбите за простоту и понятность.


📎 Статья

🎙 Новости

📝 База вопросов
  • 👍 2
More from @yeahub_tech
  1. Oct 9, 2026#Собес #pipeline #ci #stage 🤔 Что происходит при автоматической сборке feature-ветки на s…
  2. Oct 8, 2026#course #задачи #тесты 📚 JavaScript. A3 Задачи Задачи на программирования на языке JavaSc…
  3. Oct 7, 2026#course #начинающие 📚 Твой Golang Твой Golang — это идеальный старт для освоения языка. П…
  4. Oct 5, 2026🧑‍💻 Вопросы с собесов для Node.js Разработчика 1. Как использовать Service Workers для р…
  5. Oct 2, 2026#Собес #transaction #propagation #required 🤔 Что такое propagation у транзакций и какие т…
  6. Oct 1, 2026#book #book 📚 Библия C#. 6-е изд. Автор: Михаил Фленов Это настольная книга программиста,…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →