Просмотр исходного кода

feat: initialize Go learning project with tutorial and tests

zhuts 4 дней назад
Сommit
7332d3021e
6 измененных файлов с 335 добавлено и 0 удалено
  1. 20 0
      .gitignore
  2. 188 0
      INSTALL.md
  3. 80 0
      README.md
  4. 3 0
      go.mod
  5. 18 0
      main.go
  6. 26 0
      main_test.go

+ 20 - 0
.gitignore

@@ -0,0 +1,20 @@
+# 编译产物与测试输出
+/bin/
+/dist/
+*.exe
+*.exe~
+*.test
+*.out
+coverage*.txt
+coverage*.html
+
+# 本地编辑器与系统文件
+/.idea/
+/.vscode/
+.DS_Store
+Thumbs.db
+
+# 本地环境配置(不要提交密码或令牌)
+.env
+.env.*
+!.env.example

+ 188 - 0
INSTALL.md

@@ -0,0 +1,188 @@
+# 安装、依赖与编译运行教程(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. 前往 <https://go.dev/dl/> 下载适合 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. 从 <https://code.visualstudio.com/> 安装 VS Code。
+2. 扩展面板(`Ctrl + Shift + X`)搜索 `golang.Go`,安装由 Go Team at Google 发布的 Go 扩展。
+3. 使用“打开文件夹”打开本项目根目录。
+4. 打开 `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`**。
+
+### 在新电脑克隆
+
+先从 <https://git-scm.com/downloads/win> 安装 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. 运行第一个程序
+
+在项目根目录执行:
+
+```powershell
+go run .
+```
+
+预期输出:
+
+```text
+你好,Go!
+欢迎开始 Go 语言学习与测试。
+2 + 3 = 5
+```
+
+这里的 `.` 表示当前目录的包。修改代码并保存后,再次运行该命令即可。
+
+也可用 `go run main.go` 运行当前单文件示例,但后续程序拆分为多个文件时,优先使用 `go run .`,避免遗漏其他源码文件。
+
+## 6. 格式化、测试与检查
+
+```powershell
+# 格式化所有包
+go fmt ./...
+
+# 运行表驱动单元测试
+go test -v ./...
+
+# 查看测试覆盖率
+go test -cover ./...
+
+# 静态检查常见问题
+go vet ./...
+```
+
+`main_test.go` 验证了正数、零、负数和正负混合相加。`_test.go` 文件不会被编译进正常程序。覆盖率可能不到 100%,因为当前只为加法函数写了测试,没有对终端输出入口做测试。
+
+## 7. 编译为 Windows 可执行文件
+
+在 PowerShell 执行:
+
+```powershell
+# 创建构建输出目录,重复执行也可以
+New-Item -ItemType Directory -Force bin | Out-Null
+
+# 编译
+go build -o ./bin/hello.exe .
+
+# 启动编译后的程序
+.\bin\hello.exe
+```
+
+编译成功时通常没有额外输出。PowerShell 运行当前目录下的程序需要 `./` 或 `.\` 前缀,不能只输入 `hello.exe`。
+
+编译后的程序可以在兼容的 Windows 和 CPU 架构环境运行,一般不需要目标电脑安装 Go SDK。本项目没有 C 语言依赖。`bin` 已加入 Git 忽略规则,不提交可执行文件。
+
+## 8. 在 VS Code 中调试
+
+1. 打开 `main.go`,在函数内的可执行语句左侧点击,添加断点。
+2. 按 F5,如提示安装 Delve 则按提示安装。
+3. 如需选择调试配置,选择 Go 的当前包(Launch Package)模式。
+4. 用 F10 单步执行,观察变量 `a`、`b` 的值。
+
+优先先确认终端 `go run .` 能正常执行,再排查编辑器调试问题。不需要额外安装 Code Runner 扩展。
+
+## 9. 日常 Git 提交流程
+
+在仓库初始化和首次推送完成后,日常修改可使用:
+
+```powershell
+git status
+git diff
+git add README.md INSTALL.md main.go main_test.go go.mod .gitignore
+git commit -m "docs: update Go learning notes"
+git push
+```
+
+如果提示缺少提交身份,请设置你自己的用户名与邮箱,可只对当前仓库设置:
+
+```powershell
+git config user.name "你的名字"
+git config user.email "你的邮箱"
+```
+
+提交前检查暂存内容,确保没有密码、令牌、私钥或其他敏感文件。不要为了覆盖远程历史而随意使用强制推送。

+ 80 - 0
README.md

@@ -0,0 +1,80 @@
+# Go 语言学习与测试
+
+用于学习 Go 基础语法、运行示例、编写单元测试和练习编译发布的个人学习仓库。
+
+## 快速开始
+
+安装 Go SDK 后,在本目录的终端执行:
+
+```powershell
+go version
+go run .
+```
+
+预期输出:
+
+```text
+你好,Go!
+欢迎开始 Go 语言学习与测试。
+2 + 3 = 5
+```
+
+本项目仅使用 Go 标准库,**不需要安装第三方运行依赖**。完整安装步骤、工具依赖、编译运行方法及常见问题见 [安装与运行教程](./INSTALL.md)。
+
+## 项目结构
+
+```text
+.
+├── README.md       # 项目说明
+├── INSTALL.md      # 安装、依赖、运行、测试与编译教程
+├── go.mod          # Go 模块与工具链版本要求
+├── main.go         # 第一个程序:输出、变量与加法函数
+├── main_test.go    # Sum 函数的表驱动单元测试
+└── .gitignore      # 忽略编译产物和本地配置
+```
+
+当前模块路径为 `example.com/go-study`,是本地学习用的模块标识,不需要注册域名,与 Git 远程地址可以不同。
+
+## 常用命令
+
+```powershell
+# 编译并运行
+go run .
+
+# 格式化
+go fmt ./...
+
+# 单元测试与静态检查
+go test -v ./...
+go vet ./...
+
+# 编译并运行 Windows 可执行文件
+New-Item -ItemType Directory -Force bin | Out-Null
+go build -o ./bin/hello.exe .
+.\bin\hello.exe
+```
+
+`go run` 会先编译再运行;`go build` 生成可以单独启动的可执行文件。
+
+## 学习路线
+
+1. 读懂入口函数 `main`、导入语句 `import`、变量声明 `:=`。
+2. 修改输出和加法函数,学习参数、返回值与类型。
+3. 运行测试,为新函数补充更多测试用例。
+4. 练习条件判断、循环、数组、切片和 map。
+5. 继续学习结构体、接口、错误处理、文件与 JSON。
+6. 最后学习 goroutine、channel 和简单 HTTP 服务。
+
+后续独立练习建议分别放在 `cmd/hello`、`cmd/variables` 等子目录中,使用 `go run ./cmd/hello` 运行;不要在同一个包中重复声明 `main` 函数。
+
+## 参考资料
+
+- [Go 官方文档](https://go.dev/doc/)
+- [A Tour of Go](https://go.dev/tour/)
+- [标准库参考](https://pkg.go.dev/std)
+
+## Git 仓库
+
+远程地址:<http://vk-fly.com:10880/ZhuTianShuai/go_learn.git>
+
+请勿将密码、访问令牌或个人环境配置提交到仓库。当前提供的是 HTTP 地址,不能提供 HTTPS 的传输加密;如服务端支持,建议后续改用 HTTPS 或 SSH。

+ 3 - 0
go.mod

@@ -0,0 +1,3 @@
+module example.com/go-study
+
+go 1.27.3

+ 18 - 0
main.go

@@ -0,0 +1,18 @@
+package main
+
+import "fmt"
+
+// Sum 返回两个整数的和,用于练习函数和单元测试。
+func Sum(a, b int) int {
+	return a + b
+}
+
+// main 是程序的入口。运行当前包时,Go 会调用这个函数。
+func main() {
+	fmt.Println("你好,Go!")
+	fmt.Println("欢迎开始 Go 语言学习与测试。")
+
+	// := 用于声明变量,并由 Go 自动推断变量类型。
+	a, b := 2, 3
+	fmt.Printf("%d + %d = %d\n", a, b, Sum(a, b))
+}

+ 26 - 0
main_test.go

@@ -0,0 +1,26 @@
+package main
+
+import "testing"
+
+// TestSum 使用表驱动测试,一次验证多组输入。
+func TestSum(t *testing.T) {
+	tests := []struct {
+		name string
+		a    int
+		b    int
+		want int
+	}{
+		{name: "positive", a: 2, b: 3, want: 5},
+		{name: "zero", a: 0, b: 0, want: 0},
+		{name: "negative", a: -2, b: -3, want: -5},
+		{name: "mixed", a: -2, b: 3, want: 1},
+	}
+
+	for _, tt := range tests {
+		t.Run(tt.name, func(t *testing.T) {
+			if got := Sum(tt.a, tt.b); got != tt.want {
+				t.Fatalf("Sum(%d, %d) = %d, want %d", tt.a, tt.b, got, tt.want)
+			}
+		})
+	}
+}