Skip to content

Latest commit

 

History

History
47 lines (35 loc) · 7.5 KB

File metadata and controls

47 lines (35 loc) · 7.5 KB

Раздел 13. Тулинг: Управление, Отладка и Профилирование

Один из самых недооценённых факторов перехода с .NET на Go — это инструментарий. В мире .NET вы привыкли к мощной IDE (Visual Studio / Rider), к интегрированному отладчику в один клик, к NuGet, к коммерческим профайлерам мирового класса (dotTrace, dotMemory) и к PerfView. Многое из этого — отдельные продукты, нередко платные, живущие вокруг рантайма.

Go исповедует другую философию: бо́льшая часть тулинга — часть самого языка и поставляется в одном бинарнике go. Сборка, тесты, форматирование, статический анализ, управление зависимостями, профилирование, трассировка — всё это подкоманды go или пакеты стандартной библиотеки. Профайлер (pprof) встроен в рантайм настолько глубоко, что вы можете профилировать прод прямо через HTTP-эндпоинт без пересборки и без сторонних агентов. Отладчик (dlv) — заметное исключение: он не входит в дистрибутив, но это единственный стандарт де-факто, который понимает горутины и рантайм Go.

Этот раздел — практический. Мы разберём три кита повседневной работы: управление зависимостями и инструментами, отладку через Delve и профилирование через pprof (с акцентом на последнем — это суперсила Go), а в финале сведём всё в таблицу соответствий с .NET-миром.

Цели обучения

  • Чётко разделять go get (управление зависимостями модуля) и go install (установка исполняемых инструментов), перестав их путать.
  • Устанавливать инструменты как зависимости проекта: исторический паттерн tools.go и современная директива tool в go.mod (Go 1.24) с командой go tool.
  • Понимать роль GOPATH/GOBIN/модульного кэша и место go mod tidy, go vet, go fmt в едином тулчейне.
  • Отлаживать Go-код через Delve (dlv debug/test/attach, инспекция горутин, удалённая headless-отладка для контейнеров) и понимать, почему стандарт — не gdb.
  • Профилировать приложения через pprof: программно (runtime/pprof) и по HTTP (net/http/pprof), читать профили CPU/heap/goroutine/block/mutex, строить flame graphs, искать утечки и горячие места.
  • Профилировать бенчмарки (go test -bench -cpuprofile -memprofile -benchmem) и знать про go tool trace.
  • Сопоставлять весь инструментарий Go с экосистемой .NET (CLI, профайлеры, отладчик, форматтеры/анализаторы).

Содержание раздела

  1. Управление пакетами и инструментамиgo get vs go install, директива tool в go.mod (Go 1.24) против tools.go, GOPATH/GOBIN/кэш, go mod tidy/vet/fmt.
  2. Отладка: Delve — почему dlv, а не gdb; dlv debug/test/attach, инспекция горутин, headless-режим для контейнеров, интеграция с VS Code и GoLand.
  3. Профилирование: pprof — встроенный профайлер: runtime/pprof и net/http/pprof, виды профилей, рабочий процесс go tool pprof, flame graphs, бенчмарки с профилированием, go tool trace.
  4. Сравнение с .NET — единый CLI обоих миров, встроенный pprof против внешних профайлеров, отдельный Delve против интегрированного отладчика VS, сводная таблица инструментов.

Ориентир: что в .NET → что в Go

Держите таблицу под рукой при чтении раздела. Детали каждого сопоставления разбираются в соответствующих главах.

Задача / инструмент в .NET Аналог в Go Ключевое различие
dotnet add package (NuGet) go get pkg@version Правит go.mod/go.sum; нет отдельного .csproj с <PackageReference>
dotnet tool install -g go install pkg@version Ставит бинарник в $GOBIN, не трогает зависимости проекта
dotnet tool install (local) + dotnet-tools.json директива tool в go.mod + go tool (Go 1.24) Инструменты как зависимости проекта, версионируются вместе с кодом
dotnet build / run / test / publish go build / run / test / install Единый тулчейн в обоих мирах, но Go компилирует в один статический бинарник
dotnet format gofmt / go fmt В Go форматирование каноничное и неконфигурируемое — стиль один на всех
Roslyn-анализаторы / dotnet format analyzers go vet + staticcheck go vet встроен; staticcheck — стандарт сообщества
Отладчик Visual Studio / vsdbg Delve (dlv) В Go отладчик — отдельный CLI-инструмент, а не часть IDE/рантайма
dotTrace / VS Profiler (CPU) pprof (CPU-профиль) Встроен в рантайм; профилирует прод через HTTP
dotMemory (память/аллокации) pprof (heap/allocs) Встроен; снимок кучи без отдельного агента
dotnet-trace / PerfView (события, трассировка) go tool trace Трассировщик планировщика/горутин в составе тулчейна
dotnet-counters / EventCounters эндпоинты net/http/pprof + метрики В Go диагностика по умолчанию идёт через HTTP-эндпоинты
BenchmarkDotNet go test -bench (+ -benchmem, -cpuprofile) Бенчмарки — часть go test, не отдельная библиотека

⌂ Главная · → Следующий: Управление пакетами и тулзами