|
|
1 dag sedan | |
|---|---|---|
| lessons | 1 dag sedan | |
| .gitignore | 4 dagar sedan | |
| INSTALL.md | 4 dagar sedan | |
| README.md | 1 dag sedan | |
| go.mod | 4 dagar sedan |
按编号逐级学习,每个例程独占一个文件夹,代码、测试和该例程说明放在一起,不与其他例程混放。
.
├── 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 工具安装、依赖管理、编译、测试和调试步骤。
远程地址:http://vk-fly.com:10880/ZhuTianShuai/go_learn.git
请勿提交密码、访问令牌或个人环境配置。当前 HTTP 地址没有 HTTPS 传输加密;如服务端支持,建议改用 HTTPS 或 SSH。