Files
lab/go/practice
labmem d375463de5 refactor(go)!: 分离练习区与独立项目区
- 将现有练习及 module 文件迁移至 go/practice,保持代码和依赖不变
- 新增 go/projects 项目区说明,更新目录约定与开发命令

BREAKING CHANGE: Go 练习命令需改在 go/practice 目录下执行
2026-10-15 22:26:57 +08:00
..

practice — 练习区

共用一个 module 的练手代码:go.mod 在本目录(module lab),所有日常练习都放这里。两区定位见 ../README.md。

约定

  • 每个小程序 = 一个子目录:package main + main.go,多个小程序并存互不冲突(不同目录、各自的 main)。
  • 库包与测试包同样是合法形态:算法实现可以只提供库(如 algorithms/linkedlist/),testing/ 下多为只有 *_test.go 的测试包。
  • 测试文件用 *_test.go,与被测代码同目录或独立成子包均可。
  • 程序长成完整应用、依赖需要独立管理时,移到 ../projects/ 单独 go mod init。

当前主题

目录 放什么
basics/ 语法基础、内置类型行为(slice/map、runtime、pprof、goroutine 泄漏等)
algorithms/ 数据结构与算法(含可复用的库包,如 linkedlist/)
testing/ 练习 Go 测试机制,按点分子包:table-driven、regexp、net、crypto、json、error 等

主题目录可随时增删:想练并发、标准库、设计模式、Web 时,直接新建 concurrency/、stdlib/、patterns/、web/ 等目录即可。

常用命令

以下示例从仓库根目录开始执行:

cd go/practice
go run ./basics/runtime/                          # 运行单个程序
go test ./...                                     # 运行全部测试(不保证全过,见下方说明)
go test ./testing/... -v                          # testing 包及其子包的全部测试
go test ./testing/slice -run TestSliceAppend -v   # 运行单个测试
go mod tidy                                       # 整理依赖

注意:练习代码中含阻塞(如 channel 永久等待)或依赖环境(如反向 DNS)的测试示例,go test ./... 不保证全部通过;验证单个练习可用 go test ./testing/slice -run TestSliceAppend。