# 安装、依赖与编译运行教程(Windows + VS Code)
## 1. 需要安装什么
| 组件 | 是否必需 | 作用 |
| --- | --- | --- |
| Go SDK | 必需 | 提供编译器、标准库、`go` 命令和测试工具 |
| VS Code | 推荐 | 编辑代码 |
| VS Code Go 扩展(`golang.Go`) | 推荐 | 代码补全、格式化、测试入口和调试支持 |
| Git | 克隆和提交仓库时必需 | 管理代码版本 |
| gopls | 编辑器功能推荐 | Go 语言服务,供扩展提供补全、跳转等功能 |
| Delve(`dlv`) | 断点调试时需要 | Go 调试器 |
Go 是编译型语言,安装 Go SDK 即可编译运行,不需要另外安装解释器。编辑器扩展不能代替 SDK。
本项目当前的 `go.mod` 声明 `go 1.27.3`,建议安装 Go 1.27.3 或更新稳定版本。这是当前学习环境使用的版本,不表示示例语法只能在该版本使用。
## 2. 安装 Go SDK
1. 前往 下载适合 Windows 系统架构的安装包。
2. 常见 Intel / AMD 64 位电脑选择 `windows-amd64.msi`;ARM64 设备选择对应架构。
3. 按向导安装,记录安装位置。
4. 彻底退出并重新打开 VS Code、PowerShell。已运行的程序可能还保留旧 PATH。
5. 在新的终端检查:
```powershell
go version
go env GOROOT GOPATH
```
如果提示找不到 `go`:
- 检查 SDK 安装目录下是否存在 `bin\go.exe`。
- 将这个 `bin` 目录加入 Windows 的 `Path` 环境变量,然后重新打开终端。
- 本次机器上检测到的位置是 `D:\Work_software\Go_sdk\bin`;其他机器请使用实际安装路径,不要直接照搬。
- 可先用完整路径验证(路径含空格时也使用 `&`):
```powershell
& 'D:\Work_software\Go_sdk\bin\go.exe' version
```
通常无需手动配置 `GOROOT` 或 `GOPATH`。`GOROOT` 是 SDK 目录,`GOPATH` 默认用于工具安装、模块缓存等用途,不要求把本项目放进 `GOPATH`。
## 3. 安装 VS Code 和 Go 扩展工具
1. 从 安装 VS Code。
2. 扩展面板(`Ctrl + Shift + X`)搜索 `golang.Go`,安装由 Go Team at Google 发布的 Go 扩展。
3. 使用“打开文件夹”打开本项目根目录。
4. 打开 `lessons/01_hello/main.go`,根据提示安装所需工具;或按 `Ctrl + Shift + P`,执行 `Go: Install/Update Tools`。
5. 安装 `gopls`;需要 F5 断点调试时再安装 `dlv`。
也可手动安装这些**开发工具**(需要网络,不属于项目运行依赖):
```powershell
go install golang.org/x/tools/gopls@latest
go install github.com/go-delve/delve/cmd/dlv@latest
```
工具通常安装在 `GOPATH\bin`,设置了 `GOBIN` 时以 `GOBIN` 为准。可执行 `go env GOPATH GOBIN` 查看。希望在终端直接执行 `gopls` / `dlv` 时,把工具安装目录加入 PATH。
`@latest` 会随上游更新变化,并可能要求更新的 Go 版本。优先使用扩展推荐版本;若有版本兼容报错,按工具官方说明升级 SDK 或安装兼容的工具版本。
## 4. 获取项目与处理依赖
### 已经打开当前项目
直接在项目根目录打开终端即可。仓库已有公共 `go.mod`,所有例程共用它,**不要在根目录或例程目录重复执行 `go mod init`**。
每个例程独占 `lessons/编号_主题/` 目录,拥有自己的程序、测试和说明。根目录只放公共配置及教程,不放程序入口。
### 在新电脑克隆
先从 安装 Git,重启终端后执行:
```powershell
git --version
git clone http://vk-fly.com:10880/ZhuTianShuai/go_learn.git
Set-Location go_learn
```
如果远程要求认证,请通过本机 Git 凭据管理器或服务端支持的安全方式登录,不要把密码写进远程 URL、代码或文档。该地址使用明文 HTTP,建议服务端启用 HTTPS 或改用 SSH。
### 本项目的依赖
当前只使用标准库 `fmt` 和 `testing`,它们随 SDK 提供,**无需 `go get` 或其他第三方包安装命令**。
可以在项目根目录执行:
```powershell
go mod tidy
```
该命令根据源码整理依赖。当前没有第三方模块时,没有 `go.sum` 是正常现象。未来增加外部依赖后,可以用 `go mod download` 下载已声明的模块依赖。
未来确实需要添加某个第三方库时,再执行 `go get 模块路径@版本`,并检查、提交依赖声明的变更。`go install ...@版本` 用于安装命令行工具,不等于为项目添加库依赖。
若依赖下载失败,先检查网络和代理配置:
```powershell
go env GOPROXY
```
根据所在网络与组织要求选用可信代理,不要通过关闭校验或使用不可信镜像来绕过问题。本示例运行不需要下载第三方库;如果本地 Go 版本低于模块要求,Go 的自动工具链选择机制仍可能触发工具链下载,因此推荐先安装匹配的 SDK。
## 5. 运行第一个程序
在项目根目录指定第 01 课的目录:
```powershell
go run ./lessons/01_hello
```
预期输出:
```text
你好,Go!
欢迎开始 Go 语言学习与测试。
2 + 3 = 5
```
修改代码并保存后,再次运行该命令即可。也可以从项目根目录进入本课:
```powershell
Set-Location lessons/01_hello
go run .
```
这里的 `.` 表示当前例程所在的包,能包含本课目录中的多个源码文件。根目录没有 Go 程序入口,不要在根目录执行 `go run .`。每次只运行一课,不使用 `go run ./...` 同时启动所有例程。
下文公共命令按项目根目录执行;如果刚进入本课,可用 `Set-Location ../..` 返回根目录。
## 6. 格式化、测试与检查
```powershell
# 格式化所有包
go fmt ./...
# 只测试第 01 课
go test -v ./lessons/01_hello
# 测试所有课程
go test -v ./...
# 查看测试覆盖率
go test -cover ./...
# 静态检查常见问题
go vet ./...
```
`lessons/01_hello/main_test.go` 验证了正数、零、负数和正负混合相加。`_test.go` 文件不会被编译进正常程序。覆盖率可能不到 100%,因为当前只为加法函数写了测试,没有对终端输出入口做测试。
## 7. 编译为 Windows 可执行文件
在项目根目录的 PowerShell 执行,每课使用单独的产物目录:
```powershell
# 创建第 01 课的构建输出目录,重复执行也可以
New-Item -ItemType Directory -Force bin/01_hello | Out-Null
# 只编译第 01 课
go build -o ./bin/01_hello/hello.exe ./lessons/01_hello
# 启动编译后的程序
.\bin\01_hello\hello.exe
```
命令解释:
- `go build` 是编译命令。
- `-o ./bin/01_hello/hello.exe` 指定输出文件的路径和名称。
- `./lessons/01_hello` 指定要编译的例程目录。
- `go run ./lessons/01_hello` 则是先编译再立即运行,不会在指定输出目录保留可执行文件,并不是解释执行。
- 修改源码后,需要重新执行编译命令;已经生成的可执行文件不会自动变化。
Go 与 C 类似,也有主函数入口:可执行程序使用 `package main`,并声明无参数、无返回值的 `func main()`。它不需要 C 中的 `return 0`,源码也不一定必须叫 `main.go`。详细示例和 C / Go 对照见 [第 01 课:主函数入口](./lessons/01_hello/README.md#go-也有-main-主函数吗)。
编译成功时通常没有额外输出。PowerShell 运行当前目录下的程序需要 `./` 或 `.\` 前缀,不能只输入 `hello.exe`。
编译后的程序可以在兼容的 Windows 和 CPU 架构环境运行,一般不需要目标电脑安装 Go SDK。本项目没有 C 语言依赖。`bin` 已加入 Git 忽略规则,不提交可执行文件。
## 8. 在 VS Code 中调试
1. 打开 `lessons/01_hello/main.go`,在函数内的可执行语句左侧点击,添加断点。
2. 按 F5,如提示安装 Delve 则按提示安装。
3. 如需选择调试配置,选择 Go 的当前包(Launch Package)模式,目标应是当前文件所在的例程目录(`${fileDirname}`),不是仓库根目录。
4. 用 F10 单步执行,观察变量 `a`、`b` 的值。
优先先确认在根目录运行 `go run ./lessons/01_hello` 能正常执行,再排查编辑器调试问题。不需要额外安装 Code Runner 扩展。
## 9. 日常 Git 提交流程
在仓库初始化和首次推送完成后,日常修改可使用:
```powershell
git status
git diff
git add -A -- README.md INSTALL.md lessons go.mod .gitignore
git commit -m "docs: update Go learning notes"
git push
```
如果提示缺少提交身份,请设置你自己的用户名与邮箱,可只对当前仓库设置:
```powershell
git config user.name "你的名字"
git config user.email "你的邮箱"
```
提交前检查暂存内容,确保没有密码、令牌、私钥或其他敏感文件。不要为了覆盖远程历史而随意使用强制推送。