从零到一:在 Trae CN + Docker 中搭建 Go + Gin 开发环境
写在前面
最近我在 Ubuntu 26.04 上尝试使用 Trae CN 编辑器,配合 Docker 容器来开发一个 Go + Gin 的项目(go-gin-learning)。整个过程踩了一些坑,但也跑通了一套还算顺手的工作流。这篇文章就是一份完整的记录,希望能帮到遇到类似问题的朋友。
如果你已经看过我之前的博客(比如《在 Ubuntu 26.04 中基于 Docker Compose + Go 1.26.4 完成基础环境的搭建》),那这篇可以算是“下一篇”——从代码提交到容器运行,全部串起来。
一、宿主机上的准备工作
1.1 安装 Git 并配置用户信息
首先确保宿主机有 Git,然后设置全局用户名和邮箱(这些信息会写在每次 commit 里):
git config --global user.name "shuijingwan"
git config --global user.email "shuijingwanwq@163.com"
验证一下:
git config --global user.name
git config --global user.email
1.2 配置 GitHub 认证(使用 Token)
从 2021 年起 GitHub 不再支持密码认证,需要生成 Personal Access Token。
- 登录 GitHub → Settings → Developer settings → Personal access tokens → Tokens (classic)
- 点击 Generate new token (classic)
- 勾选
repo权限,生成后复制 token(只显示一次) - 在宿主机终端执行:
git push origin main
当提示输入用户名时输入你的 GitHub 用户名,密码处粘贴刚才复制的 token。成功后 Git 会记住认证信息(如果配置了 credential helper)。
1.3 安装 Go(宿主机)
为了让 Trae CN 中的代码补全、语法跳转正常工作,需要在宿主机安装 Go。我选择了使用 APT 安装,简单省事:
sudo apt update
sudo apt install golang-go -y
go version
输出:go version go1.26.0 linux/amd64
其实系统“软件”中心里也有 Go 的 Snap 版本(见截图),但 APT 更轻量,且与容器内的 Go 版本兼容。

1.4 在 Trae CN 中安装 Go 扩展
打开 Trae CN 的扩展商店,搜索 Go,找到官方扩展(发布者为 golang)并安装。

安装完成后,按 Ctrl+Shift+P,输入 Go: Install/Update Tools,在弹出的列表中勾选 gopls、dlv、staticcheck 等常用工具,点击确定。

等待安装完成,然后重新加载窗口。
至此,宿主机上的代码编辑环境已经就绪。

main.go 中输入 fmt. 应该能看到智能提示。二、容器中的开发环境
2.1 让容器复用宿主机的 Git 配置
我们希望在容器内执行 git commit 时也能使用宿主机的用户名和邮箱。修改 docker-compose.yml,挂载 ~/.gitconfig:
volumes:
- ./:/code
- ~/.gitconfig:/root/.gitconfig:ro
重启容器后,进入容器验证:
docker exec -it go-gin-learning sh
git config --global user.name # 应显示 shuijingwan
git config --global user.email # 应显示 shuijingwanwq@163.com
2.2 解决 Go 模块下载慢的问题
一开始容器内执行 go mod tidy 总是失败或超时,因为默认代理 goproxy.io 不稳定,而且每次容器重建都会清空缓存。
解决方案有两个:
- 设置更稳定的代理:
go env -w GOPROXY=https://goproxy.cn,direct - 持久化模块缓存:将宿主机的目录挂载到容器的
/go/pkg/mod
我采用了后者,在 docker-compose.yml 中添加:
volumes:
- ~/go/pkg-mod-go-gin-learning:/go/pkg/mod
这样容器内的依赖包会存放在宿主机的一个专用目录中,即使容器删除也不会丢失。再次执行 go mod tidy 时,所有 go: downloading 都成功了。
2.3 运行 Gin 服务
在容器内执行:
go run main.go
看到如下输出说明服务启动成功:
[GIN-debug] Listening and serving HTTP on 0.0.0.0:8080
用浏览器访问 http://localhost:8080/albums,返回 JSON 数据,状态码 200。

这时在 Trae CN 的 Docker 扩展面板中,可以右键容器选择 Attach Shell,方便地打开容器终端。

三、总结与标准化展望
当前工作流小结
- 宿主机:负责 Git 操作、代码编辑、Go 语言服务器(gopls)。
- 容器:负责运行
go run、go test,依赖模块通过挂载的缓存目录持久化。 - Trae CN:通过 Go 扩展提供智能补全,通过 Docker 扩展附加到容器终端,做到“编辑在宿主机,运行在容器”。
虽然 Dev Containers 在 Trae CN 上暂时不可用,但通过“宿主机 Go + 容器运行 + 缓存持久化”的组合,我们依然获得了一个高效、可靠的开发环境。
(顺便说一句,.devcontainer/devcontainer.json 我并没有删除,因为团队里其他使用 VS Code 的成员可能还需要它。)
未来可以标准化的点
- 使用 Makefile 封装常用命令:比如
make run、make test、make tidy,减少手动输入。 - 集成 Air 热加载:在容器内安装
air,保存文件后自动重启服务,提升开发效率。 - 将环境配置写成脚本:把
docker-compose.yml的 volumes 设置、代理配置、依赖安装等写成setup.sh,方便新成员快速加入。 - 考虑使用 Remote – SSH:如果未来团队都在同一台服务器上开发,可以改用 SSH 远程开发,彻底统一环境。