TGViewer
Библиотека Go-разработчика | Golang Библиотека Go-разработчика | Golang @goproglib · 24.1K subscribers
Post #7158 3.53K
🛠 mise для Go-разработчиков: версии, окружение и задачи в одном файле

В 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
  • 👍 10
  • ❤ 5
  • 👾 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 →