在正式编写 SQL 数据库之前,我们需要把开发环境准备好。本章将带你完成工具安装、代码获取、项目构建和测试验证,确保后续章节可以顺利进行。
1. 开发环境要求
本课程提供 Go、Rust、Java、C++ 四种语言的实现,你可以选择自己最熟悉的语言来跟随课程。下表列出了每种语言所需的开发工具和版本:
| 语言 | 工具链 | 版本要求 | 测试命令 |
| Go | Go 编译器 | Go 1.21+ | go test ./... |
| Rust | rustup + cargo | Rust 2021 edition | cargo test --verbose |
| Java | JDK + Maven | JDK 17+, Maven 3.x | mvn clean test -B |
| C++ | GCC/Clang + CMake | C++17, CMake 3.14+ | ctest --output-on-failure |
只需选一种语言:你不需要安装全部四种语言的环境。选择自己最擅长或最感兴趣的一种即可,四种语言的实现逻辑完全一致。
验证你的工具是否已正确安装:
$ go version
go version go1.21.0 linux/amd64
$ rustc --version
rustc 1.75.0 (82e1608df 2023-12-21)
$ cargo --version
cargo 1.75.0 (1d8b05cdd 2023-11-20)
$ java -version
openjdk version "17.0.9" 2023-10-17
$ mvn -version
Apache Maven 3.9.6
$ g++ --version
g++ (GCC) 13.2.0
$ cmake --version
cmake version 3.28.1
2. 获取课程代码
课程的全部源码托管在 GitHub 上,使用 git clone 获取:
$ git clone https://github.com/codepie-labs/codepie-2-sql-database.git
Cloning into 'codepie-2-sql-database'...
done.
$ cd codepie-2-sql-database
仓库中每个章节对应一个 git commit,你可以通过 git log --oneline 查看所有章节的代码变更历史。每一章的代码都是在前一章基础上累积的,所以你总是可以看到完整的项目状态。
建议:先完整克隆仓库,然后在阅读每一章时对照 commit 的代码变更来理解每一步做了什么。
3. 项目结构
仓库的顶层目录按语言划分,每种语言都是一个独立的项目,互不依赖:
codepie-2-sql-database/
├── go/ # Go 实现
├── rust/ # Rust 实现
├── java/ # Java 实现
└── cpp/ # C++ 实现
各语言目录的内部结构说明:
go/
Go Module 项目,使用 go.mod 管理依赖,测试用 Go 内置的 testing 包。
rust/
Cargo 项目,使用 Cargo.toml 管理依赖,测试用 Rust 内置的 #[test] 框架。
java/
Maven 项目,使用 pom.xml 管理依赖,测试框架为 JUnit 5。
cpp/
CMake 项目,使用 CMakeLists.txt 构建,测试框架为 Google Test (v1.14.0)。
4. 构建与测试
进入对应语言的目录,执行构建和测试命令。如果一切顺利,你应该能看到所有测试通过:
$ cd go
$ go test -v ./...
ok codepie-sql-db/... 0.012s
Go 的工具链自带编译和测试功能,不需要额外的构建步骤。go test ./... 会递归测试所有子包。
$ cd rust
$ cargo test --verbose
test result: ok. 0 passed; 0 failed; 0 ignored
Cargo 会自动下载依赖并编译项目。首次运行可能需要等待一段时间。
$ cd java
$ mvn clean test -B
[INFO] BUILD SUCCESS
Maven 会自动下载依赖和插件。注意使用 mvn clean test 而不是 mvn test,确保干净构建。
$ cd cpp
$ cmake -B build
$ cmake --build build
$ cd build && ctest --output-on-failure
100% tests passed, 0 tests failed out of 0
CMake 会通过 FetchContent 自动下载 Google Test。首次构建需要联网。
测试必须全部通过:如果有测试失败,请检查工具版本是否满足要求。后续章节的代码都建立在前一章的基础上,确保环境正确非常重要。
5. IDE 推荐
IDE 和编辑器推荐:
- VS Code(免费):安装对应语言的扩展即可——Go 扩展、rust-analyzer、Java Extension Pack、C/C++ 扩展。适合所有语言。
- GoLand:JetBrains 出品的 Go IDE,开箱即用,调试体验最佳。
- IntelliJ IDEA:Java 开发首选,社区版免费,对 Maven 项目支持最好。
- CLion:JetBrains 出品的 C++ IDE,对 CMake 项目支持最好。
- RustRover:JetBrains 出品的 Rust IDE,对 Cargo 项目支持很好。
无论使用哪个编辑器,建议开启以下功能:
- 代码格式化:保存时自动格式化(Go 用
gofmt,Rust 用 rustfmt,Java 用 IDE 内置,C++ 用 clang-format)
- 自动补全:确保 Language Server 正常工作,能提供类型提示和跳转
- 终端集成:方便在编辑器内直接运行测试命令
6. 常见问题
Q:Go 下载依赖很慢怎么办?
如果你在中国大陆,Go Module 的默认代理可能访问较慢。可以设置国内镜像:
go env -w GOPROXY=https://goproxy.cn,direct
设置后重新运行
go test 即可。
Q:Rust 工具链安装失败?
推荐使用
rustup 安装 Rust 工具链,它会自动管理
rustc 和
cargo 的版本。如果网络不通,可以设置
RUSTUP_DIST_SERVER 和
RUSTUP_UPDATE_ROOT 使用国内镜像:
export RUSTUP_DIST_SERVER=https://rsproxy.cn
export RUSTUP_UPDATE_ROOT=https://rsproxy.cn/rustup
Q:Java 版本不对导致编译失败?
本课程要求 JDK 17+。如果你系统中安装了多个 JDK 版本,请确保
JAVA_HOME 指向 JDK 17 或更高版本。可以用以下命令检查:
java -version
echo $JAVA_HOME
如果版本不对,macOS 用户可以用
brew install openjdk@17,Linux 用户可以用包管理器安装。
本章小结
- 环境准备:根据你选择的语言,安装对应版本的工具链。
- 代码获取:通过
git clone 获取课程仓库,仓库按语言分为四个独立目录。
- 构建测试:进入对应语言目录执行测试命令,确保所有测试通过。
- IDE 配置:选择你习惯的编辑器,配置好代码补全和格式化。
环境搭建完成后,下一章我们将正式进入 SQL 数据库的开发——首先了解 SQL 解析器的整体设计思路。