Новое: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Все вопросы
GoMiddleКодинг

Что такое race detector в Go и как его использовать?

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

Race detector включается флагом -race и использует ThreadSanitizer для обнаружения одновременных незащищённых обращений к памяти в рантайме. Применяется в тестах и CI, в продакшн бинарь не включают из-за накладных расходов.

Как включить

Флаг -race можно добавить к любой стандартной команде:

go run -race main.go          # запустить с детектором
go test -race ./...           # тесты всех пакетов
go build -race -o myapp .     # собрать бинарь с детектором
go test -race -count=5 ./...  # несколько прогонов для воспроизведения

Race detector в Go

Race detector — встроенный инструмент обнаружения гонок данных (data races). Он основан на алгоритме ThreadSanitizer (TSan) и отслеживает все обращения к памяти во время выполнения программы. Если два горутина одновременно читают и пишут одну переменную без синхронизации, детектор немедленно сообщает о нарушении.

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

package main

import (
	"fmt"
	"sync"
)

func main() {
	counter := 0
	var wg sync.WaitGroup

	for i := 0; i < 1000; i++ {
		wg.Add(1)
		go func() {
			defer wg.Done()
			counter++ // гонка данных!
		}()
	}
	wg.Wait()
	fmt.Println(counter)
}

Запуск go run -race main.go выдаст примерно:

==================
WARNING: DATA RACE
Write at 0x00c0000b4010 by goroutine 7:
  main.main.func1()
      /tmp/main.go:15 +0x44
Previous write at 0x00c0000b4010 by goroutine 6:
  main.main.func1()
      /tmp/main.go:15 +0x44
==================

Исправление

var mu sync.Mutex
go func() {
	defer wg.Done()
	mu.Lock()
	counter++
	mu.Unlock()
}()
// или использовать atomic.AddInt64

Накладные расходы

  • Память: ~5-10x
  • Время выполнения: ~2-20x
  • Размер бинаря: увеличивается

Поэтому race detector включают только в тестах и staging, но не в продуктивных бинарях.

Переменные окружения

GORACE="log_path=/tmp/race.log halt_on_error=1" go test -race ./...
# log_path — куда писать отчёты
# halt_on_error=1 — остановить при первой гонке
# strip_path_prefix — обрезать префикс в путях

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

  • Race detector обнаруживает только фактические гонки в момент выполнения — гонки в неисполненных ветках кода пропускаются.
  • Детектор не работает на unsafe-операциях — они обходят всю инструментацию.
  • Включение -race в продуктивный бинарь резко увеличивает потребление памяти; под нагрузкой это вызывает OOM.
  • Ложноотрицательные результаты возможны при слабом тестовом покрытии: гонка есть, но ни один тест её не воспроизводит.
  • Детектор требует cgo для TSan, поэтому он недоступен при полной статической сборке (CGO_ENABLED=0).
  • На macOS ARM64 (Apple Silicon) ранние версии Go давали некорректные трассировки; важно использовать Go 1.19+.
  • В CI рекомендуется запускать go test -race -count=3 ./... — некоторые гонки проявляются только при повторных запусках.

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

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

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

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

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

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

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

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

Источники

  • https://go.dev/doc/articles/race_detector.html
  • https://go.dev/ref/mem
←Предыдущий вопросЧто такое slice в Go? Чем он отличается от массива? Объясните внутреннюю структуру (указатель, длина, ёмкость).Следующий вопрос→Что такое interfaces в Go? Как работает неявная реализация интерфейсов?

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

GoDebuggingmemory-modeltesting

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

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)