01.环境 & Hello World
文件名: env_hello_world
概念：安装、GOPATH vs Go Modules、go run / build
代码：package main; import "fmt"; func main(){ fmt.Println("hi") }
练习：把 "hi" 换成自己名字并编译成二进制。

02.包声明与导入
文件名: package_import
概念：package 声明规则、import 语法、别名、点导入、空白导入
代码：package main; import ("fmt"; "math/rand"); func main(){ fmt.Println(rand.Int()) }
练习：go mod init myproject 新建一个 quote 包，导出一个函数打印一句名言。

03.可见性规则
文件名: visibility_rules
概念：首字母大写导出，小写私有；包内外访问差异
代码：package utils; var Public = 1; var private = 2
练习：在 main 包尝试访问 utils.Public 和 utils.private，观察编译错误。

04.变量声明（var）
文件名: variables_var
概念：var 声明、零值、多变量同时声明
代码：var i int; var s = "hello"; var x, y, z float64
练习：打印各类型零值并观察结果。

05.短变量声明（:=）
文件名: short_declaration
概念：函数体内自动推断类型、重声明限制
代码：name := "gopher"; age := 10
练习：将第 4 步代码全部改写成短声明形式。

06.常量与 iota
文件名: constants_iota
概念：const 声明、iota 自增、枚举
代码：const ( Sunday = iota; Monday; Tuesday )
练习：用 iota 定义一周七天的枚举并打印。

07.基本数据类型
文件名: basic_data_types
概念：bool, string, 整数/浮点/复数, byte, rune
代码：var b bool; var f float64 = 3.14; var c complex128 = 1 + 2i
练习：打印复数的实部与虚部。

08.字符串操作
文件名: string_operations
概念：拼接、len、for range、[]rune 转换
代码：s := "hello"; fmt.Println(len(s), []rune(s))
练习：把 "hello" 逆序输出。

09.字符串格式化
文件名: string_formatting
概念：Printf 动词、%v %T %q %x %.2f
代码：fmt.Printf("type=%T, value=%q, hex=%x\n", 255, 255, 255)
练习：用 %q 打印含转义字符的字符串。

10.数组
文件名: arrays
概念：固定长度、值类型、字面量初始化
代码：var a [3]int = [3]int{1, 2, 3}
练习：写一个函数返回数组元素之和。

11.切片
文件名: slices
概念：动态长度、append、copy、切片表达式
代码：s := []int{1, 2, 3}; s = append(s, 4)
练习：实现 remove(slice, index) 删除指定元素。

12.切片底层原理
文件名: slice_internals
概念：len vs cap、共享底层数组、扩容策略
代码：fmt.Println(len(s), cap(s))
练习：通过打印验证 append 触发扩容时的容量变化。

13.映射
文件名: maps
概念：hash 表、增删改查、ok 判断
代码：m := map[string]int{"a": 1}; v, ok := m["b"]
练习：统计一段文本中每个单词出现次数。

14.结构体
文件名: structs
概念：定义、字面量、字段公开/私有、嵌套
代码：type Point struct{ X, Y float64 }
练习：给 Point 添加 Distance 方法计算两点距离。

15.指针
文件名: pointers
概念：& 取址、* 解引用、值 vs 指针接收者
代码：p := &x; *p = 100
练习：实现 swap(a, b *int) 交换两整数。

16.函数（基础）
文件名: basic_functions
概念：参数、返回值、多返回值、命名返回值
代码：func add(a, b int) (sum int) { sum = a + b; return }
练习：写函数返回两个数的和与差。

17.可变参数
文件名: variadic_params
概念：...T、在函数内当作切片使用
代码：func sum(nums ...int) int { ... }
练习：实现 max(nums ...int) int 取最大值。

18.defer 语句
文件名: defer_statement
概念：LIFO 延迟执行、常用于资源清理
代码：defer fmt.Println(1); defer fmt.Println(2)
练习：观察并解释输出顺序。

19.init 函数
文件名: init_function
概念：每个源文件可有多个 init、执行顺序
代码：func init() { fmt.Println("init") }
练习：在多个文件写 init 并观察打印顺序。

20.error 接口
文件名: error_handling
概念：error 类型、errors.New、fmt.Errorf
代码：err := errors.New("something wrong")
练习：写 div(a, b float64) (float64, error) 处理除零。

21.if 语句
文件名: if_statement
概念：初始化语句、作用域
代码：if x := 10; x > 5 { ... }
练习：写闰年判断函数。

22.switch 语句
文件名: switch_statement
概念：无表达式 switch、fallthrough、多 case
代码：switch day { case 1: ... }
练习：把数字 1-7 转成英文星期单词。

23.for 循环
文件名: for_loops
概念：三段式、条件式、无限循环、break/continue
代码：for i := 0; i < 10; i++ { ... }
练习：打印 1-100 的偶数。

24.range
文件名: range_loop
概念：遍历 slice、map、string
代码：for i, v := range []int{1, 2, 3} { ... }
练习：用 range 统计字符串中每个字符出现次数。

25.goto 与标签
文件名: goto_labels
概念：跳转标签、跳出多层循环
代码：goto END
练习：用 goto 实现重试三次的逻辑。

26.方法
文件名: methods
概念：值/指针接收者、方法集
代码：func (p Point) Move(dx, dy float64) { ... }
练习：给 Celsius 类型添加 String() 方法实现自定义打印。

27.接口
文件名: interfaces
概念：接口定义、隐式实现、空接口
代码：type Shape interface { Area() float64 }
练习：让 Rect 和 Circle 实现 Shape 接口。

28.类型断言
文件名: type_assertions
概念：v, ok := i.(T)
代码：if s, ok := val.(string); ok { ... }
练习：从 []interface{} 中提取所有 int 并求和。

29.类型 switch
文件名: type_switches
概念：switch v := i.(type)
代码：switch v := val.(type) { case int: ... }
练习：打印任意值的实际类型。

30.组合（嵌入）
文件名: embedding
概念：结构体嵌入接口/结构体实现类似继承
代码：type Logger struct{ log.Logger }
练习：嵌入 fmt.Stringer 并调用方法。

31.goroutine
文件名: goroutines
概念：轻量级线程、go 关键字启动
代码：go fmt.Println("hello from goroutine")
练习：并发打印 A-Z 和 0-9 交叉输出。

32.channel 基础
文件名: channels_basics
概念：chan T、发送/接收操作、阻塞特性
代码：ch := make(chan int); ch <- 1; v := <-ch
练习：启动两个 goroutine 交替打印 1-10。

33.缓冲 channel & close
文件名: buffered_channels_close
概念：带缓冲 channel、close、range 接收
代码：ch := make(chan int, 2); close(ch)
练习：实现 fan-out 多 worker 模式。

34.select 语句
文件名: select_statement
概念：多路复用、default 非阻塞、超时控制
代码：select { case v := <-ch: ... default: ... }
练习：用 time.After 实现 1 秒超时。

35.sync.Mutex
文件名: sync_mutex
概念：互斥锁、临界区保护
代码：var mu sync.Mutex; mu.Lock(); ...; mu.Unlock()
练习：并发累加 1000 次并保证正确性。

36.sync.WaitGroup
文件名: sync_waitgroup
概念：等待一组 goroutine 完成
代码：var wg sync.WaitGroup; wg.Add(1); go func(){ defer wg.Done() }(); wg.Wait()
练习：等待 N 个任务完成再退出 main。

37.单元测试
文件名: unit_tests
概念：*_test.go、TestXxx(t *testing.T)
代码：func TestAdd(t *testing.T) { ... }
练习：为 add 函数写 3 个测试用例。

38.表驱动测试
文件名: table_driven_tests
概念：用切片/结构体组织多组输入输出
代码：tests := []struct{ a, b, want int }{...}
练习：把上一步测试改为表驱动风格。

39.基准测试
文件名: benchmarks
概念：BenchmarkXxx(b *testing.B)、go test -bench
代码：func BenchmarkAdd(b *testing.B) { ... }
练习：基准测试 sum(nums ...int) 性能。

40.模块管理（go mod）
文件名: go_modules
概念：go mod init、tidy、get、语义化版本
代码：go mod init hello; go get github.com/google/uuid@v1.2.0
练习：用 uuid 包生成并打印一个 UUID。