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 怎么用?我们下篇见~

相关推荐
uhakadotcom1 小时前
Python 量化计算入门:基础库和实用案例
后端·算法·面试
小萌新上大分1 小时前
SpringCloudGateWay
java·开发语言·后端·springcloud·springgateway·cloudalibaba·gateway网关
uhakadotcom2 小时前
使用Python获取Google Trends数据:2025年详细指南
后端·面试·github
uhakadotcom2 小时前
使用 Python 与 Google Cloud Bigtable 进行交互
后端·面试·github
PacosonSWJTU2 小时前
python基础-13-处理excel电子表格
开发语言·python·excel
froginwe112 小时前
Perl 条件语句
开发语言
直视太阳2 小时前
springboot+easyexcel实现下载excels模板下拉选择
java·spring boot·后端
追逐时光者3 小时前
C#/.NET/.NET Core技术前沿周刊 | 第 33 期(2025年4.1-4.6)
后端·.net
啥都鼓捣的小yao3 小时前
利用C++编写操作OpenCV常用操作
开发语言·c++·opencv
灼华十一3 小时前
Golang系列 - 内存对齐
开发语言·后端·golang