工程化知识体系概览
问题
Go 项目的工程化实践包括哪些方面?
答案
知识体系
核心实践
| 实践 | 工具/方案 | 说明 |
|---|---|---|
| 依赖管理 | Go Modules | go.mod / go.sum |
| 项目结构 | Standard Layout | cmd/ internal/ pkg/ |
| 代码规范 | golangci-lint | 聚合多个 Linter |
| 构建 | Makefile | 统一构建入口 |
| 容器化 | Docker 多阶段构建 | 编译 + 最小镜像 |
| CI/CD | GitHub Actions | 自动测试/部署 |
| 日志 | zap / zerolog | 结构化日志 |
| 配置 | Viper | 多源配置 |
常见面试问题
Q1: Go 项目和 Java/Node.js 项目的工程化有什么不同?
答案:
- 编译为二进制:不需要运行时环境,Docker 镜像可以用 scratch(空镜像)
- go mod:不需要 npm/Maven 中央仓库,直接从 Git 拉取
- 内置格式化:
gofmt统一风格,没有 tab vs space 之争 - 内置测试:
go test不需要额外测试框架 - 交叉编译:一条命令编译任意平台
GOOS=linux GOARCH=amd64 go build