Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+694новые вакансии за сутки·52 494вакансии открыты сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании5 662
РезюмеAIПодготовкаСтатьи
ТарифыТарифы
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 391 кандидат открыт к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python6 244
  • Облачные технологии4 749
  • QA вакансии1 736
  • Android1 148
  • Инженер данных800
  • Продакт-менеджер321

Разработка

  • iOS1 092
  • Backend вакансии1 046
  • Fullstack вакансии453
  • AI вакансии391
  • Frontend вакансии376
  • Mobile вакансии27

По стеку

  • Go3 590
  • Java2 153
  • Kotlin942
  • Node.js767
  • Rust544
  • .NET496
  • PHP267
  • C++220
  • C#198

DevOps и инфраструктура

  • Kubernetes2 686
  • Linux-инфраструктура2 117
  • DevOps вакансии1 960
  • Terraform / IaC1 615
  • CI/CD871
  • Мониторинг и Observability742
  • SRE228
  • Кибербезопасность47

Аналитика и данные

  • Аналитик данных495
  • Data Scientist449
  • Бизнес-аналитик351
  • Системный аналитик54

Другие направления

  • Проджект-менеджер109
  • UI/UX дизайн70
  • Ручное тестирование14

По регионам

  • Вакансии в США23 835
  • Вакансии в Европе9 341
  • Работа в России3 283
  • Вакансии в Канаде2 140

По формату

  • Удалённые вакансии41 311
  • Релокация в США23 835
  • Гибридная работа4 058
  • Офисная работа2 949

По уровню

  • Senior вакансии20 396
  • Middle вакансии11 620
  • Junior вакансии3 665

Сейчас нанимают

Все компании
  • Rakuten188 вакансий
  • ASML163 вакансии
  • Wise139 вакансий
  • Grab134 вакансии
  • Infobip28 вакансий
  • Adyen23 вакансии
  • Darktrace17 вакансий
  • Spotify15 вакансий
  • Celonis11 вакансий
  • Razorpay9 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме GoВсе вопросы
GoSeniorПроектирование систем

Какие распространённые паттерны применяются для структурирования Go-приложения (например, Clean Architecture, hexagonal)?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

Go-приложения структурируют по Clean Architecture (domain → usecase → interface → infrastructure) или Hexagonal (core + ports + adapters), разделяя бизнес-логику от инфраструктуры через интерфейсы.

Clean Architecture на практике

Типичная структура каталогов:

myapp/
├── cmd/
│   └── api/
│       └── main.go
├── internal/
│   ├── domain/          # сущности, value objects, domain errors
│   │   ├── user.go
│   │   └── order.go
│   ├── usecase/         # бизнес-логика, не знает про HTTP/DB
│   │   ├── user_service.go
│   │   └── interfaces.go  # порты (интерфейсы репозиториев)
│   ├── adapter/
│   │   ├── http/        # handlers, middleware
│   │   └── postgres/    # реализации репозиториев
│   └── config/
└── pkg/                 # shared utilities

Ключевые слои и их зависимости:

  • domain — чистые структуры и методы, нет зависимостей на внешние пакеты
  • usecase — бизнес-сценарии, зависит только от domain и объявляет интерфейсы
  • adapter — HTTP-хендлеры, Postgres/Redis-репозитории, реализующие интерфейсы из usecase
  • cmd — точка входа, wire-up зависимостей (ручной DI или google/wire)
// internal/usecase/interfaces.go
package usecase

type UserRepository interface {
	FindByID(ctx context.Context, id int64) (*domain.User, error)
	Save(ctx context.Context, u *domain.User) error
}

// internal/usecase/user_service.go
package usecase

type UserService struct {
	repo UserRepository
}

func NewUserService(repo UserRepository) *UserService {
	return &UserService{repo: repo}
}

func (s *UserService) GetUser(ctx context.Context, id int64) (*domain.User, error) {
	user, err := s.repo.FindByID(ctx, id)
	if err != nil {
		return nil, fmt.Errorf("GetUser: %w", err)
	}
	return user, nil
}

// internal/adapter/postgres/user_repo.go
package postgres

type UserRepo struct {
	db *pgxpool.Pool
}

func (r *UserRepo) FindByID(ctx context.Context, id int64) (*domain.User, error) {
	row := r.db.QueryRow(ctx, `SELECT id, name, email FROM users WHERE id=$1`, id)
	var u domain.User
	if err := row.Scan(&u.ID, &u.Name, &u.Email); err != nil {
		return nil, err
	}
	return &u, nil
}

Архитектурные паттерны Go-приложений

Большинство серьёзных Go-проектов используют один из двух подходов: Clean Architecture или Hexagonal Architecture (она же Ports & Adapters). Оба требуют явного разделения бизнес-логики и инфраструктурного кода через интерфейсы.

Hexagonal Architecture

Отличие от Clean — терминология: порты (интерфейсы) делятся на driving ports (API, CLI) и driven ports (DB, email). Адаптеры реализуют порты. Структурно похоже, но явно выделяются:

  • ports/inbound/ — интерфейсы use-case-ов (для хендлеров)
  • ports/outbound/ — интерфейсы инфраструктуры (репозитории, email-клиенты)
  • adapters/primary/ — HTTP/gRPC/CLI адаптеры
  • adapters/secondary/ — Postgres, Redis, S3 адаптеры

Dependency Injection: ручной vs google/wire

// cmd/api/main.go — ручной wire-up
func main() {
	db := postgres.NewPool(cfg.DSN)
	userRepo := postgres.NewUserRepo(db)
	userSvc := usecase.NewUserService(userRepo)
	h := httphandler.NewUserHandler(userSvc)

	router := chi.NewRouter()
	router.Get("/users/{id}", h.GetUser)
	http.ListenAndServe(":8080", router)
}

Для больших проектов — github.com/google/wire генерирует wire-код на основе провайдеров.

Подводные камни

  • Циклические импорты: если domain импортирует usecase — нарушение правила зависимостей, Go не скомпилирует.
  • Толстые интерфейсы: Repository с 20 методами — нарушение ISP; дробите на UserReader и UserWriter.
  • Бизнес-логика в хендлерах: проверки и расчёты в HTTP-слое делают код нетестируемым.
  • Анемичная domain-модель: структуры только с полями без методов — скрытая потеря преимуществ DDD.
  • Слишком глубокая вложенность каталогов: Go не требует Java-подобных иерархий; 3 уровня обычно достаточно.
  • Утечка инфраструктурных типов в usecase: передача *sql.Tx или pgxpool.Pool напрямую — зависимость от реализации.
  • Отсутствие context propagation: не передавать ctx через все слои ломает deadline/cancellation.
  • God-пакет internal/: все в одном пакете без разбивки — антипаттерн, убивает модульность и тестирование.

Частые вопросы на собеседовании

  • Для каких задач Go (Golang) является сильным выбором, а где лучше честно выбрать другой язык?
  • Как писать unit-тесты в Go? Что такое пакет testing?
  • Что происходит при добавлении элементов за пределы ёмкости slice?
  • Как Go управляет пакетами и модулями? Что такое go.mod?

Типичные ошибки

  • Давать ответ про структурирование Go-приложений только на уровне определения, не показывая поведение в реальном приложении.
  • Игнорировать границы ответственности вокруг темы «структурирование Go-приложений»: кто отменяет работу, кто владеет ресурсом и где формируется ответ клиенту.
  • Не связывать структурирование Go-приложений с observability, тестированием или безопасностью, когда это влияет на продакшен-поведение.

Что проверяет интервьюер

  • Точно объясняет, что именно делает структурирование Go-приложений и где это используется в Go-коде.
  • Связывает структурирование Go-приложений с корректным lifecycle запроса, отменой, конкурентностью или конфигурацией сервера там, где это уместно.
  • Не изобретает API и опирается на реальные контракты официальной документации.

Как вы знаете этот вопрос?

Проверить себя по теме Go →

Источники

  • https://go.dev/doc/modules/layout
  • https://go.dev/blog/package-names

Связанные темы

Gomaintainabilitymodule-organizationsystem-design

Вакансии с этим навыком

Go вакансии
  • Product Manager (GORA) - Life & Leisure Service Development(LLSD)
  • Senior Software Engineer, Advertisement Optimization Group - Merchandising and Advertisement Department (MAD)
  • QA Manager - EC Expansion Development Department (ECEXD)
  • EC Design Lead (Web Director) - D2C Fulfillment Section, Commerce & Marketing Company (C&M)
  • AI Engineer - LLM Adoption Department (LLMAD)