TGViewer
Библиотека Go-разработчика | Golang Библиотека Go-разработчика | Golang @goproglib · 24.1K subscribers
Post #7104 3.51K
🛠 make как точка входа в Go-проект

Когда работаете над Go-проектом в команде, быстро появляется проблема: каждый запускает сборку и тесты по-своему. Один пишет go build -o app, другой забыл флаги линтера, третий вообще не знает, какую команду использовать. Makefile решает это раз и навсегда.

Что такое Makefile и зачем он нужен

Makefile это файл с набором именованных команд. Вы описываете, что делает каждая цель, а потом вызываете её одним словом. Больше не нужно помнить длинные команды или держать их в заметках.

Вот базовый пример для Go-проекта:
run:
go run .

test:
go test ./...

lint:
golangci-lint run

build:
go build -o app


Теперь вместо того, чтобы каждый раз вспоминать точный синтаксис:
make run
make test
make build


Как это работает

make читает Makefile в текущей директории и выполняет команды под нужной целью. Каждая цель это метка, за которой идут shell-команды с отступом через табуляцию. Важный момент: отступ должен быть именно табом, не пробелами, иначе make вернёт ошибку.

Можно добавить зависимости между целями. Например, чтобы тесты всегда запускались после линтера:
check: lint test


Или сделать build зависимым от test, чтобы не собирать проект с непрошедшими тестами:
build: test
go build -o app


Makefile быстро обрастает полезными целями. Несколько примеров:
.PHONY: run test lint build clean

clean:
rm -f app

tidy:
go mod tidy

cover:
go test ./... -coverprofile=coverage.out
go tool cover -html=coverage.out


Директива .PHONY говорит make, что эти цели не являются именами файлов. Без неё, если в директории окажется файл с именем build, make решит, что цель уже выполнена и ничего не запустит.

Makefile это простой способ зафиксировать рабочие команды проекта в одном месте. Новый человек в команде запускает make build и всё работает так же, как у остальных. Не нужно читать README в поисках нужной команды и не нужно помнить флаги наизусть.

📍 Навигация: Вакансии • Задачи • Собесы

🐸 Библиотека Go-разработчика

#GoDeep
  • 🔥 13
  • 👍 6
  • 🥱 4
  • ❤ 1
More from @goproglib
  1. Sep 30, 2026🧑‍💻 Эмулятор AWS-сервисов Kumo — это небольшой инструмент на Go для локальной имитации A…
  2. Sep 29, 2026👨‍💻 Библиотека для написания LSP-серверов Написать свой Language Server с нуля на Go сло…
  3. Sep 28, 2026🤔 Вопрос с собеседования по Go Что выведет программа? ❤️ — 1 true / 0 false 🔥 — 1 true /…
  4. Sep 28, 2026👩‍💻 Что на самом деле происходит внутри Go map? После Go 1.24 обычный map внутри работае…
  5. Sep 26, 2026🔥 В Go 1.27 появился portable SIMD До этого SIMD-оптимизации в Go требовали архитектурног…
  6. Sep 25, 2026🤡🤡 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика #GoGiggle
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 →