| 组件 | 是否必需 | 作用 |
|---|---|---|
| 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 或更新稳定版本。这是当前学习环境使用的版本,不表示示例语法只能在该版本使用。
windows-amd64.msi;ARM64 设备选择对应架构。在新的终端检查:
go version
go env GOROOT GOPATH
如果提示找不到 go:
bin\go.exe。bin 目录加入 Windows 的 Path 环境变量,然后重新打开终端。D:\Work_software\Go_sdk\bin;其他机器请使用实际安装路径,不要直接照搬。可先用完整路径验证(路径含空格时也使用 &):
& 'D:\Work_software\Go_sdk\bin\go.exe' version
通常无需手动配置 GOROOT 或 GOPATH。GOROOT 是 SDK 目录,GOPATH 默认用于工具安装、模块缓存等用途,不要求把本项目放进 GOPATH。
Ctrl + Shift + X)搜索 golang.Go,安装由 Go Team at Google 发布的 Go 扩展。lessons/01_hello/main.go,根据提示安装所需工具;或按 Ctrl + Shift + P,执行 Go: Install/Update Tools。gopls;需要 F5 断点调试时再安装 dlv。也可手动安装这些开发工具(需要网络,不属于项目运行依赖):
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 或安装兼容的工具版本。
直接在项目根目录打开终端即可。仓库已有公共 go.mod,所有例程共用它,不要在根目录或例程目录重复执行 go mod init。
每个例程独占 lessons/编号_主题/ 目录,拥有自己的程序、测试和说明。根目录只放公共配置及教程,不放程序入口。
先从 https://git-scm.com/downloads/win 安装 Git,重启终端后执行:
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 或其他第三方包安装命令。
可以在项目根目录执行:
go mod tidy
该命令根据源码整理依赖。当前没有第三方模块时,没有 go.sum 是正常现象。未来增加外部依赖后,可以用 go mod download 下载已声明的模块依赖。
未来确实需要添加某个第三方库时,再执行 go get 模块路径@版本,并检查、提交依赖声明的变更。go install ...@版本 用于安装命令行工具,不等于为项目添加库依赖。
若依赖下载失败,先检查网络和代理配置:
go env GOPROXY
根据所在网络与组织要求选用可信代理,不要通过关闭校验或使用不可信镜像来绕过问题。本示例运行不需要下载第三方库;如果本地 Go 版本低于模块要求,Go 的自动工具链选择机制仍可能触发工具链下载,因此推荐先安装匹配的 SDK。
在项目根目录指定第 01 课的目录:
go run ./lessons/01_hello
预期输出:
你好,Go!
欢迎开始 Go 语言学习与测试。
2 + 3 = 5
修改代码并保存后,再次运行该命令即可。也可以从项目根目录进入本课:
Set-Location lessons/01_hello
go run .
这里的 . 表示当前例程所在的包,能包含本课目录中的多个源码文件。根目录没有 Go 程序入口,不要在根目录执行 go run .。每次只运行一课,不使用 go run ./... 同时启动所有例程。
下文公共命令按项目根目录执行;如果刚进入本课,可用 Set-Location ../.. 返回根目录。
# 格式化所有包
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%,因为当前只为加法函数写了测试,没有对终端输出入口做测试。
在项目根目录的 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 课:主函数入口。
编译成功时通常没有额外输出。PowerShell 运行当前目录下的程序需要 ./ 或 .\ 前缀,不能只输入 hello.exe。
编译后的程序可以在兼容的 Windows 和 CPU 架构环境运行,一般不需要目标电脑安装 Go SDK。本项目没有 C 语言依赖。bin 已加入 Git 忽略规则,不提交可执行文件。
lessons/01_hello/main.go,在函数内的可执行语句左侧点击,添加断点。${fileDirname}),不是仓库根目录。a、b 的值。优先先确认在根目录运行 go run ./lessons/01_hello 能正常执行,再排查编辑器调试问题。不需要额外安装 Code Runner 扩展。
在仓库初始化和首次推送完成后,日常修改可使用:
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
如果提示缺少提交身份,请设置你自己的用户名与邮箱,可只对当前仓库设置:
git config user.name "你的名字"
git config user.email "你的邮箱"
提交前检查暂存内容,确保没有密码、令牌、私钥或其他敏感文件。不要为了覆盖远程历史而随意使用强制推送。