多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

mise 管理多版本 Go 项目

mise 管理多版本 Go 项目 前言你是不是也遇到过这些场景公司老项目还在用 Go 1.21新项目已经上了 1.25本地装了好几个 Go每次都要改 PATH 或者用一堆别名换台电脑或者新同事入职环境配置半天go install装的工具升级 Go 后又要重新装一遍这些问题用mise都能优雅解决。一、mise 是什么为什么特别适合 Gomise(全称 mise-en-place)是一个现代化的开发工具版本管理器可以同时管理 Node、Python、Go、Rust、Terraform 等几十种工具。它和 asdf、nvm、gvm 最大的区别在于配置简单一份mise.toml就能声明项目需要的所有工具自动切换进入项目目录版本自动生效功能全面版本管理 环境变量 任务运行一个工具搞定对 Go 原生支持很好直接读取go.mod/go.work里的 toolchain简单说它让“多版本 Go 共存”这件事变得像呼吸一样自然。gGo 版本管理器安装与使用指南GVMGo 版本管理器安装与使用指南二、安装与激活(只需一次)# 安装 curl https://mise.run | sh # 激活(以 zsh 为例bash/fish 类似) echo eval $(~/.local/bin/mise activate zsh) ~/.zshrc source ~/.zshrc验证一下mise --version三、核心用法多项目不同 Go 版本假设你有三个项目项目需要的 Go 版本legacy-api1.21current-service1.24new-feature1.251. 为每个项目指定版本# 老项目 cd ~/code/legacy-api mise use go1.21 # 当前项目 cd ~/code/current-service mise use go1.24 # 新项目 cd ~/code/new-feature mise use go1.25每个项目目录下都会自动生成mise.toml# legacy-api/mise.toml [tools] go 1.21 # current-service/mise.toml [tools] go 1.242. 自动切换无需手动操作只要你激活了 mise进入不同目录就会自动切换cd ~/code/legacy-api go version # go version go1.21.x ... cd ~/code/new-feature go version # go version go1.25.x ...是不是比以前清爽多了3. 常用检查命令mise ls --current # 查看当前生效的工具版本 mise which go # 查看实际使用的 go 路径 mise config ls # 查看当前生效的配置文件四、实战示例完整工作流我们来模拟一个真实场景。场景新接手一个项目需要 Go 1.24同时还要用到 lazygit 和 dlv。# 1. 进入项目 cd ~/code/my-go-project # 2. 指定 Go 版本 mise use go1.24 # 3. 安装常用 Go 工具(推荐用 go: 后端而不是直接 go install) mise use go:github.com/jesseduffield/lazygitlatest mise use go:github.com/go-delve/delve/cmd/dlvlatest # 4. 查看结果 cat mise.toml此时mise.toml大概是这样[tools] go 1.24 go:github.com/jesseduffield/lazygit latest go:github.com/go-delve/delve/cmd/dlv latest然后把这个文件提交到 Git。团队其他成员只需要git clone 项目地址 cd my-go-project mise install # 自动安装所有声明的工具 go version # 直接就能用正确版本五、进阶小技巧1. 让 mise 自动读取 go.mod / go.workmise settings add idiomatic_version_file_enable_tools go开启后如果go.mod或go.work里写了toolchain go1.24.3mise 就会优先使用这个版本连mise.toml都可以不写。2. 全局默认版本 项目覆盖# 设置一个全局默认版本 mise use -g go1.25 # 某个老项目单独覆盖 cd ~/code/old-project mise use go1.21优先级是项目配置 全局配置。3. 不想激活 shell 也能用mise exec -- go version # 使用当前项目版本 mise exec go1.24 -- go test ./... # 临时指定版本运行4. 升级版本也很方便# 在当前大版本内升级(1.24.x → 最新的 1.24) mise upgrade go # 升级到更新的大版本并修改 mise.toml mise upgrade --bump go六、总结为什么推荐用 mise 管理 Go痛点mise 的解决方案多版本切换麻烦进入目录自动切换环境难复现一份mise.toml提交到 Git 即可工具依赖 Go 版本用go:后端统一管理新同事入职配置繁琐mise install一条命令搞定全局和项目版本冲突全局默认 项目覆盖清晰明了mise 把「版本管理」从一件需要小心翼翼维护的事情变成了声明式、可复现、几乎无感知的日常操作。如果你正在同时维护多个 Go 项目强烈建议花半小时试试。用过之后大概就不想再回到以前手动管理版本的日子了。参考链接官方文档https://mise.jdx.devGo 专题页https://mise.jdx.dev/lang/go.htmlGitHubhttps://github.com/jdx/mise
返回列表