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

相关推荐
tt5555555555558 分钟前
C/C++嵌入式笔试核心考点精解
c语言·开发语言·c++
xiao助阵8 分钟前
python实现梅尔频率倒谱系数(MFCC) 除了傅里叶变换和离散余弦变换
开发语言·python
探索java26 分钟前
Netty Channel详解:从原理到实践
java·后端·netty
追逐时光者36 分钟前
2025 年全面的 C#/.NET/.NET Core 学习路线集合,学习不迷路!
后端·.net
科大饭桶38 分钟前
C++入门自学Day14-- Stack和Queue的自实现(适配器)
c语言·开发语言·数据结构·c++·容器
扛麻袋的少年2 小时前
7.Kotlin的日期类
开发语言·微信·kotlin
ankleless2 小时前
Spring Boot 实战:从项目搭建到部署优化
java·spring boot·后端
钢铁男儿2 小时前
Python 正则表达式实战:解析系统登录与进程信息
开发语言·python·正则表达式
百锦再2 小时前
一文精通 Swagger 在 .NET 中的全方位配置与应用
后端·ui·.net·接口·配置·swagger·访问
用户4822137167752 小时前
C++——静态数组、动态数组
后端