Açıklama Yok

zhuts 3aef897fa7 feat: 新增第二十课HTTP客户端与本地服务例程 1 gün önce
lessons 3aef897fa7 feat: 新增第二十课HTTP客户端与本地服务例程 1 gün önce
.gitignore 7332d3021e feat: initialize Go learning project with tutorial and tests 4 gün önce
INSTALL.md 197dbff561 refactor: organize numbered lessons and document Go entry point 4 gün önce
README.md 3aef897fa7 feat: 新增第二十课HTTP客户端与本地服务例程 1 gün önce
go.mod 7332d3021e feat: initialize Go learning project with tutorial and tests 4 gün önce

README.md

Go 语言分级学习与测试

按编号逐级学习,每个例程独占一个文件夹,代码、测试和该例程说明放在一起,不与其他例程混放。

项目结构

.
├── README.md               # 学习目录与公共命令
├── INSTALL.md              # 环境、依赖、编译运行教程
├── go.mod                  # 所有例程共用的模块配置
├── .gitignore
└── lessons/
    ├── 01_hello/           # 第 01 课:第一个 Go 程序
    │   ├── README.md       # 本课目标、运行方法与练习
    │   ├── main.go         # 本课独立入口
    │   └── main_test.go    # 本课测试
    ├── 02_variables/       # 第 02 课:变量、常量与基础类型
    │   ├── README.md       # 知识点、预期输出与手敲练习
    │   └── main.go         # 带逐节注释的参考代码
    ├── 03_conditions/      # 第 03 课:if 条件判断
    │   ├── README.md       # 语法、编译运行与边界练习
    │   └── main.go         # 分支、比较和逻辑运算
    ├── 04_loops/           # 第 04 课:for 循环
    │   ├── README.md       # 循环语法、编译运行与练习
    │   └── main.go         # 累加、跳过、退出和字符串遍历
    ├── 05_arrays_slices/   # 第 05 课:数组与切片
    │   ├── README.md       # 固定长度、追加、共享和复制
    │   └── main.go         # 带逐节注释的参考代码
    ├── 06_maps/            # 第 06 课:map 键值对
    │   ├── README.md       # 增删改查、遍历、nil 与共享
    │   └── main.go         # 按姓名查询成绩的参考代码
    ├── 07_functions/       # 第 07 课:函数
    │   ├── README.md       # 参数、返回值、值传递和练习
    │   ├── main.go         # 普通函数、多返回值、可变参数
    │   └── main_test.go    # 本课函数测试
    ├── 08_structs/         # 第 08 课:结构体
    │   ├── README.md       # 定义、字段、复制和结构体切片
    │   └── main.go         # 学生记录与简化测试数据表
    ├── 09_pointers/        # 第 09 课:指针
    │   ├── README.md       # 取地址、解引用、nil 和参数传递
    │   └── main.go         # 指针修改整数与结构体
    ├── 10_methods/         # 第 10 课:方法与接收者
    │   ├── README.md       # 值接收者、指针接收者与方法调用
    │   └── main.go         # 学生信息、生日和成绩修改
    ├── 11_errors/          # 第 11 课:错误处理
    │   ├── README.md       # error、nil、检查与错误传递
    │   └── main.go         # 除法、成绩校验和字符串转换
    ├── 12_switch_defer/    # 第 12 课:switch 与 defer
    │   ├── README.md       # 多分支、延迟调用与执行顺序
    │   └── main.go         # 指令选择、成绩判断和 defer 示例
    ├── 13_function_values/ # 第 13 课:函数进阶
    │   ├── README.md       # 函数值、匿名函数、闭包与 t.Run 预习
    │   └── main.go         # 回调计算、独立计数器和 defer 对比
    ├── 14_testing/         # 第 14 课:单元测试专题
    │   ├── README.md       # 测试语法、子测试、错误断言和运行命令
    │   ├── main.go         # 被测函数与普通程序入口
    │   └── main_test.go    # 基础测试、表驱动测试和边界用例
    ├── 15_packages/        # 第 15 课:包与模块
    │   ├── README.md       # 模块路径、导入、导出与外部测试
    │   ├── main.go         # 导入自定义包的程序入口
    │   └── score/
    │       ├── score.go    # 成绩转换与校验包
    │       └── score_test.go # 外部测试包
    ├── 16_interfaces/      # 第 16 课:接口
    │   ├── README.md       # 隐式实现、方法集、nil 与测试替身
    │   ├── main.go         # 不同类型通过统一接口自我介绍
    │   └── main_test.go    # 接口实现及测试替身验证
    ├── 17_files/           # 第 17 课:文件读写
    │   ├── README.md       # 路径、读写、追加、关闭与逐行扫描
    │   ├── main.go         # 在独立临时目录操作学习记录
    │   └── main_test.go    # 使用临时目录隔离的文件测试
    ├── 18_json/            # 第 18 课:JSON 编码与解码
    │   ├── README.md       # 标签、编码、解码和文件操作
    │   ├── main.go         # 学习记录的 JSON 往返示例
    │   └── main_test.go    # 往返、字段省略和非法输入测试
    ├── 19_cli/             # 第 19 课:命令行输入与参数
    │   ├── README.md       # 参数、交互输入、帮助和退出状态
    │   ├── main.go         # 学习记录输入示例
    │   └── main_test.go    # 模拟输入输出与边界测试
    └── 20_http/            # 第 20 课:HTTP 客户端与服务端
        ├── README.md       # 请求、响应、状态码与本地测试
        ├── main.go         # 临时服务和客户端请求
        └── main_test.go    # 服务处理和客户端测试

根目录不放例程代码。各课共享根目录的 go.mod,不需要逐课初始化模块,也不需要 go.work。当前模块路径 example.com/go-study 是学习用标识,不必与 Git 地址相同。

学习目录

级别 例程 内容 状态
01 第一个 Go 程序 输出、变量、函数、首次测试 已建立
02 变量、常量与基础类型 声明、赋值、零值、类型转换 已建立
03 if 条件判断 条件分支、比较、逻辑运算 已建立
04 for 循环 三段式、条件循环、break、continue、range 已建立
05 数组与切片 索引、遍历、append、截取、make、copy 已建立
06 map 键值对 增删改查、存在性判断、遍历、nil 已建立
07 函数 参数、返回值、值传递、多返回值、可变参数 已建立
08 结构体 定义、字段访问、零值、复制、结构体切片 已建立
09 指针 &、*、nil、指针参数、结构体指针、new 已建立
10 方法与接收者 方法声明、值接收者、指针接收者、nil 处理 已建立
11 错误处理 error、nil、errors.New、fmt.Errorf、错误传递 已建立
12 switch 与 defer 多分支、延迟调用、后进先出、参数求值 已建立
13 函数进阶 函数值、匿名函数、函数参数、闭包 已建立
14 单元测试专题 testing.T、表驱动、t.Run、错误断言、测试命令 已建立
15 包与模块 package、import、module、导出、跨包测试 已建立
16 接口 隐式实现、接口参数、方法集、nil、测试替身 已建立
17 文件读写 filepath、整体读写、追加、Scanner、Close 已建立
18 JSON 编码与解码 结构体标签、Marshal、Unmarshal、文件往返 已建立
19 命令行输入与参数 os.Args、flag、交互输入、校验、退出状态 已建立
20 HTTP 客户端与服务端 请求、响应、状态码、JSON、本地测试 已建立

后续按编号逐步新增独立目录。不一次性铺开后续课程,也不把新例程写进旧例程的入口文件。

快速开始

在项目根目录执行:

go version
go run ./lessons/01_hello

预期输出:

你好,Go!
欢迎开始 Go 语言学习与测试。
2 + 3 = 5

也可以进入本课目录运行:

Set-Location lessons/01_hello
go run .
go test -v .

根目录没有 Go 程序入口,不要在根目录使用 go run .。进入具体例程目录后才使用该命令。

公共命令

以下命令均在项目根目录执行:

# 只运行第 01 课
go run ./lessons/01_hello

# 只测试第 01 课
go test -v ./lessons/01_hello

# 格式化、测试、检查所有课程
go fmt ./...
go test -v ./...
go vet ./...

# 编译第 01 课到对应的构建目录
New-Item -ItemType Directory -Force bin/01_hello | Out-Null
go build -o ./bin/01_hello/hello.exe ./lessons/01_hello
.\bin\01_hello\hello.exe

每个例程独立编译运行,不要使用 go run ./... 尝试一次启动所有课程。构建产物统一放入已忽略的 bin/课程编号/ 目录。

安装与依赖

当前仅使用 Go 标准库,不需要第三方运行依赖。详见 安装与运行教程,包含 SDK、VS Code 工具安装、依赖管理、编译、测试和调试步骤。

参考资料

Git 仓库

远程地址:http://vk-fly.com:10880/ZhuTianShuai/go_learn.git

请勿提交密码、访问令牌或个人环境配置。当前 HTTP 地址没有 HTTPS 传输加密;如服务端支持,建议改用 HTTPS 或 SSH。