Go语言-初学者日记(八):构建、部署与 Docker 化

🧱 一、go build:最基础的构建方式

Go 的构建工具链是出了名的轻量、简洁,直接用 go build 就能把项目编译成二进制文件。

✅ 构建当前项目
bash 复制代码
go build -o myapp
  • -o myapp 指定输出文件名
  • 默认会构建当前目录下的 main.gopackage main
🌍 跨平台构建(Go 天然支持)

只需设置两个环境变量:

bash 复制代码
GOOS=linux GOARCH=amd64 go build -o myapp-linux
GOOS=windows GOARCH=amd64 go build -o myapp.exe

💡 无需在目标平台构建,只要设置环境变量即可构建不同系统的二进制!


📦 二、目录瘦身:只保留运行必需品

部署不等于打包整个项目,一般只需要这几样核心文件:

bash 复制代码
/dist
├── myapp            # 可执行文件
├── config.yaml      # 配置文件
└── static/          # 静态资源目录(可选)

不要把源码、测试代码、.git 目录一起打包上服务器!


🔐 三、环境变量与配置文件

配置管理是 Go 项目部署的重点:

✅ 使用环境变量(推荐做法)
go 复制代码
import "os"

port := os.Getenv("APP_PORT")

通常会结合 .env 文件:

bash 复制代码
APP_PORT=8080
APP_DEBUG=true

使用 godotenv 读取:

bash 复制代码
go get github.com/joho/godotenv
go 复制代码
_ = godotenv.Load(".env")

💬 在开发环境用 .env,上线时直接通过系统环境变量注入,更加安全。


🐳 四、使用 Docker 打包运行

现代应用部署,Docker 是首选。我们来写一个标准的 多阶段构建 Dockerfile

🛠️ Dockerfile
Dockerfile 复制代码
FROM golang:1.21-alpine as builder
WORKDIR /app
COPY . .
RUN go build -o main

FROM alpine
WORKDIR /root/
COPY --from=builder /app/main .
EXPOSE 8080
CMD ["./main"]
🚀 构建与运行
bash 复制代码
docker build -t my-go-app .
docker run -p 8080:8080 my-go-app

📦 Alpine 非常小巧,只打包了最终可执行文件,极大减小镜像大小。


🗃️ 五、部署方式参考

Go 源码 go build 可执行文件 Docker 镜像 容器运行


方式 场景 常用工具
本地部署 内网环境、开发测试 systemd, supervisor
容器部署 云平台上线 Docker, Podman
集群部署 多模块、多服务场景 Kubernetes, Helm, k3s

🧠 小贴士:

  • supervisor 可用于守护 Go 应用进程;
  • Docker 可打包应用及依赖;
  • K8s 适用于分布式部署、滚动更新等场景。

📌 小结

  • go build 支持一键构建、跨平台编译
  • ✅ 部署目录要干净,仅保留核心运行文件
  • ✅ 推荐使用环境变量管理配置,godotenv 很好用
  • ✅ Docker 是现代 Go 项目的标配部署方式

🪧 下一篇预告:

📚 Go语言-初学者日记(九):测试与性能分析

单元测试怎么写?性能瓶颈怎么查?pprof 怎么用?我们下篇见~

相关推荐
立志成为大牛的小牛8 分钟前
数据结构——二十六、邻接表(王道408)
开发语言·数据结构·c++·学习·程序人生
祈祷苍天赐我java之术13 分钟前
Redis 数据类型与使用场景
java·开发语言·前端·redis·分布式·spring·bootstrap
用户214118326360243 分钟前
OpenSpec 实战:用规范驱动开发破解 AI 编程协作难题
后端
MediaTea1 小时前
Python 第三方库:matplotlib(科学绘图与数据可视化)
开发语言·python·信息可视化·matplotlib
JS.Huang1 小时前
【JavaScript】原生函数
开发语言·javascript·ecmascript
Olrookie1 小时前
若依前后端分离版学习笔记(二十)——实现滑块验证码(vue3)
java·前端·笔记·后端·学习·vue·ruoyi
LucianaiB2 小时前
招聘可以AI面试,那么我制作了一个AI面试教练不过分吧
后端
CoderCodingNo2 小时前
【GESP】C++五级考试大纲知识点梳理, (5) 算法复杂度估算(多项式、对数)
开发语言·c++·算法
无奈何杨2 小时前
CoolGuard更新,ip2region升级、名单增加过期时间
后端
ftpeak3 小时前
JavaScript性能优化实战
开发语言·javascript·性能优化