# Go-Study **Repository Path**: 34384878/go-study ## Basic Information - **Project Name**: Go-Study - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-13 - **Last Updated**: 2026-01-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Go 语言学习项目 > 系统学习 Go 语言编程,从基础到进阶的完整学习路径 ## 项目简介 这是一个 Go 语言学习项目,用于记录 Go 语言学习过程中的代码示例、笔记和文档。 - **远程仓库**: https://gitee.com/34384878/go-study.git - **Go 版本**: 1.25 - **开发工具**: Claude Code ## 快速开始 ### 环境准备 ```bash # 验证 Go 安装 go version # 设置 Go 代理(国内推荐) go env -w GOPROXY=https://goproxy.cn,direct ``` ### 克隆项目 ```bash git clone https://gitee.com/34384878/go-study.git cd go-study ``` ### 运行代码 ```bash # 运行基础模块 go run -tags='' basic/01_variable.go # 运行进阶模块 go run -tags='' advanced/09_channel.go # 运行测试 go test -v example/time/time_test.go ``` ## 项目结构 ``` go_study/ ├── basic/ # 基础模块 (01-08) ├── advanced/ # 进阶模块 (09-22) ├── example/ # 标准库学习示例 ├── exercise/ # 练习题 ├── doc/ # 学习文档 └── 开发指南.md # 开发规范 ``` --- ## 基础模块 (basic/) | 文件 | 内容 | 核心知识点 | |------|------|-----------| | `01_variable.go` | 变量声明 | var/const、短变量声明、iota | | `02_datatype.go` | 数据类型 | string、bool、int、float | | `03_array.go` | 数组 | 5种初始化方式、类型严格性、多维数组 | | `04_slice.go` | 切片 | 动态数组、make、append、copy、截取 | | `05_struct.go` | 结构体 | 自定义类型、方法、JSON 序列化 | | `06_map.go` | 集合 | 键值对存储、CRUD、遍历、并发安全 | | `07_loop.go` | 循环 | for、range、break、continue、标签 | | `08_function.go` | 函数 | 函数定义、多返回值、可变参数、闭包 | ### 运行示例 ```bash # 运行数组示例 go run basic/03_array.go # 运行切片示例 go run -tags='' basic/04_slice.go # 运行函数示例 go run -tags='' basic/08_function.go ``` --- ## 进阶模块 (advanced/) | 文件 | 内容 | 核心知识点 | |------|------|-----------| | `09_channel.go` | Go 通道 | 无缓冲/带缓冲 channel、select、生产者消费者 | | `10_defer.go` | defer 函数 | 延迟执行、参数求值、资源清理、panic/recover | | `11_json.go` | JSON 数据 | Marshal/Unmarshal、动态解析、Streaming | | `12_json_pitfalls.go` JSON 坑 | 数字类型、时间格式、nil 处理、循环引用 | | `13_interface.go` | 接口实现 | 隐式实现、空接口、类型断言、Stringer | | `14_grpc_dial.go` | gRPC Dial | 连接选项、TLS、拦截器、Keepalive | | `15_time_rfc3339.go` | 时间格式化 | RFC3339、时区转换、时间戳、定时器 | | `16_benchmark_signatures.go` | 签名算法 | MD5、SHA、HMAC、Base64、性能对比 | | `17_high_performance_strings.go` | 高性能操作 | strings.Builder、零拷贝、结构体优化 | | `18_sync_pool.go` | sync.Pool | 对象池、并发安全、内存复用 | | `19_escape_analysis.go` | 逃逸分析 | 栈/堆分配、逃逸场景、性能优化 | | `20_map_cache.go` | Map 并发安全 | 缓存系统、读写锁、过期清理、统计 | | `21_concurrency_patterns.go` | 并发任务处理 | WaitGroup、ErrorGroup、Worker Pool、Pipeline | | `22_gpm_scheduler.go` | GPM 调度 | 调度模型、抢占、工作窃取、Netpoller | ### 运行示例 ```bash # 运行 channel 示例 go run -tags='' advanced/09_channel.go # 运行 defer 示例 go run -tags='' advanced/10_defer.go # 运行并发模式示例 go run -tags='' advanced/21_concurrency_patterns.go ``` --- ## 学习路径 ### 第一阶段:基础语法 (1-2周) ```mermaid graph LR A[变量声明] --> B[数据类型] B --> C[数组] C --> D[切片] D --> E[结构体] E --> F[Map] F --> G[循环] G --> H[函数] ``` ### 第二阶段:进阶特性 (2-4周) ```mermaid graph LR A[Channel] --> B[Defer] B --> C[JSON] C --> D[接口] D --> E[gRPC] E --> F[时间处理] F --> G[性能优化] G --> H[并发编程] ``` ### 学习建议 1. **循序渐进**:按顺序学习基础模块,不要跳跃 2. **动手实践**:每个示例都要亲自运行和修改 3. **理解原理**:不仅要会用,还要理解底层原理 4. **对比总结**:记录易错点和最佳实践 5. **实际应用**:尝试用所学知识解决实际问题 --- ## 学习资源 | 资源 | 链接 | |------|------| | Go 官方文档 | https://golang.org/doc/ | | Go 标准库 | https://pkg.go.dev/std | | Go by Example | https://gobyexample.com/ | | Effective Go | https://golang.org/doc/effective_go | | Go 语言圣经 | https://gopl-zh.github.io/ | --- ## 开发规范 ### 命名规范 - **文件名**:小写字母 + 下划线 `time_demo.go` - **包名**:小写单词 `package main` - **导出**:首字母大写 `func ExportFunc()` - **私有**:首字母小写 `func privateFunc()` ### 测试规范 ```go // 测试文件:*_test.go func TestFunctionName(t *testing.T) { result := FunctionName() if result != expected { t.Errorf("expected %v, got %v", expected, result) } } ``` --- ## 常用命令 ```bash # Go 基础命令 go run main.go # 运行程序 go build # 编译项目 go test -v # 运行测试(详细输出) go mod tidy # 整理依赖 # 查看逃逸分析 go build -gcflags="-m" main.go # 竞态检测 go run -race main.go # Git 命令 git status # 查看状态 git add . # 添加变更 git commit -m "msg" # 提交 git push # 推送远程 ``` --- ## 常见问题 ### Q: 为什么某些文件需要 `-tags=''` 参数? 基础模块的文件都添加了 `//go:build ignore` 标签,避免多个 main 函数冲突。运行时需要使用: ```bash go run -tags='' basic/03_array.go ``` ### Q: 如何查看详细的编译信息? ```bash # 查看逃逸分析 go build -gcflags="-m -m" main.go # 查看调度器状态 GODEBUG=schedtrace=1 go run main.go # 查看 GC 状态 GODEBUG=gctrace=1 go run main.go ``` ### Q: 测试失败怎么办? ```bash # 使用 -v 参数查看详细输出 go test -v example/time/time_test.go # 只运行特定测试 go test -run TestTimeDemo -v ``` --- ## 更新日志 | 日期 | 版本 | 内容 | |------|------|------| | 2026-01-24 | v2.0 | 完成基础+进阶模块重组,共 22 个学习文件 | | 2026-01-23 | v1.5 | 添加 README 文档 | | 2026-01-22 | v1.2 | 添加 time 包练习题 | | 2026-01-20 | v1.0 | 项目初始化 | --- ## 贡献指南 欢迎提交 Issue 和 Pull Request! 1. Fork 本仓库 2. 创建特性分支 `git checkout -b feature/AmazingFeature` 3. 提交变更 `git commit -m 'feat: Add AmazingFeature'` 4. 推送分支 `git push origin feature/AmazingFeature` 5. 提交 Pull Request --- ## 许可证 MIT License --- **当前共有 7 个领先远程的提交**