В Go-проектах часто встречается такая ситуация: один сервис требует Go 1.21, другой уже на 1.22, а на CI стоит что-то третье. Переключаться руками неудобно,
GOPATH и GOROOT легко запутать, а Makefile со временем превращается в набор магических команд, которые понимает только автор.mise решает это без лишних движений: один файл mise.toml в корне проекта фиксирует версию Go, переменные окружения и команды сборки.Установка
curl https://mise.run | sh
echo 'eval "$(~/.local/bin/mise activate bash)"' >> ~/.bashrc
Для zsh и fish команда активации аналогична, только меняется шелл.
Пример mise.toml для Go-проекта
[tools]
go = "1.22"
[env]
GOFLAGS = "-mod=vendor"
APP_ENV = "development"
DATABASE_URL = "postgres://localhost/myapp_dev"
[tasks.build]
description = "Собрать бинарник"
run = "go build -o bin/app ./cmd/app"
[tasks.test]
description = "Запустить тесты"
run = "go test ./..."
[tasks.lint]
description = "Запустить golangci-lint"
run = "golangci-lint run"
[tasks.run]
description = "Запустить сервер"
depends = ["build"]
run = "./bin/app"
Установить Go нужной версии и сразу запустить сборку:
mise install
mise run build
Как переключаться между версиями Go
Глобально поставить одну версию, а в конкретном проекте использовать другую:
mise use --global go@1.22
Внутри папки проекта это переопределяется через
mise.toml. mise сам выставит правильный PATH при входе в директорию — никаких export GOROOT руками.Проверить, какая версия активна прямо сейчас:
mise current go
Почему это лучше Makefile
Makefile не знает ничего про версии инструментов и переменные окружения. Разработчик клонирует репозиторий, запускает make build и получает ошибку, потому что у него Go 1.20, а проект требует 1.22.С
mise картина другая: mise install сам скачивает нужную версию Go, выставляет переменные и после этого mise run build работает так же, как на машине соседа и на CI.Если в проекте несколько сервисов
mise поддерживает вложенные конфиги. В каждом подкаталоге со своим mise.toml будет своя версия Go и своё окружение. Глобальный конфиг при этом остаётся как запасной вариант.➡️ Репозиторий
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
#GoToProduction
