第 3 章

环境搭建

难度:入门 | 免费章节

在正式编写 SQL 数据库之前,我们需要把开发环境准备好。本章将带你完成工具安装、代码获取、项目构建和测试验证,确保后续章节可以顺利进行。

1. 开发环境要求

本课程提供 Go、Rust、Java、C++ 四种语言的实现,你可以选择自己最熟悉的语言来跟随课程。下表列出了每种语言所需的开发工具和版本:

语言工具链版本要求测试命令
GoGo 编译器Go 1.21+go test ./...
Rustrustup + cargoRust 2021 editioncargo test --verbose
JavaJDK + MavenJDK 17+, Maven 3.xmvn clean test -B
C++GCC/Clang + CMakeC++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 和编辑器推荐

无论使用哪个编辑器,建议开启以下功能:

6. 常见问题

Q:Go 下载依赖很慢怎么办?
如果你在中国大陆,Go Module 的默认代理可能访问较慢。可以设置国内镜像:
go env -w GOPROXY=https://goproxy.cn,direct
设置后重新运行 go test 即可。
Q:Rust 工具链安装失败?
推荐使用 rustup 安装 Rust 工具链,它会自动管理 rustccargo 的版本。如果网络不通,可以设置 RUSTUP_DIST_SERVERRUSTUP_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 用户可以用包管理器安装。

本章小结

  1. 环境准备:根据你选择的语言,安装对应版本的工具链。
  2. 代码获取:通过 git clone 获取课程仓库,仓库按语言分为四个独立目录。
  3. 构建测试:进入对应语言目录执行测试命令,确保所有测试通过。
  4. IDE 配置:选择你习惯的编辑器,配置好代码补全和格式化。

环境搭建完成后,下一章我们将正式进入 SQL 数据库的开发——首先了解 SQL 解析器的整体设计思路。