# go-learn **Repository Path**: jsen/go-learn ## Basic Information - **Project Name**: go-learn - **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-28 - **Last Updated**: 2026-01-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Go语言实战教程 - 为Java工程师打造 > 从Java到Go的完整学习路径,涵盖Web开发、数据库、微服务和性能优化实践 ## 🎯 适合人群 - 具备Java开发经验的工程师 - 希望快速上手Go语言的开发者 - 需要构建高性能微服务的团队 - 想要了解Go惯用法和最佳实践的学习者 ## 📚 学习路径 ### 第一周:思维转换与语言基础 ``` Java思维 → Go思维 → 语言基础 → 项目结构 ↓ ↓ ↓ ↓ 1天 2天 3天 1天 ``` **学习目标**:理解Go的设计哲学,掌握基础语法 1. [Java到Go的思维转换](docs/01-java-to-go-mindset.md) ⭐ 必读 - OOP vs 组合模式 - 异常 vs 错误处理 - 线程 vs Goroutine - 注解 vs 结构体标签 2. [语言基础](docs/02-language-fundamentals.md) - 基础语法(对比Java) - 数据结构:slice、map - 接口和组合 - 并发编程:Goroutine和Channel 3. [项目结构](docs/03-project-structure.md) - 标准Go项目布局 - go.mod依赖管理 - 包组织规则 ### 第二周:Web开发实战 ``` Gin框架 → 数据库操作 → REST API → 中间件 ↓ ↓ ↓ ↓ 2天 2天 2天 1天 ``` **学习目标**:构建生产级REST API服务 4. [Web框架](docs/04-web-frameworks.md) ⭐⭐⭐ 重点 - Gin框架(Spring Boot对标) - Echo框架(企业级选择) - 路由、中间件、请求处理 - 完整REST API示例 5. [数据库访问](docs/05-database-access.md) ⭐⭐⭐ 重点 - GORM(MyBatis-Plus对标) - sqlx(JDBC Template对标) - 连接池配置 - 事务处理 ### 第三周:微服务架构 ``` gRPC → 服务发现 → 负载均衡 → API网关 ↓ ↓ ↓ ↓ 2天 2天 2天 1天 ``` **学习目标**:设计和实现微服务系统 6. [微服务架构](docs/06-microservices.md) ⭐⭐⭐ 重点 - gRPC实战 - 服务注册与发现 - 熔断降级 - Spring Cloud对照 ### 第四周:生产实践 ``` 测试 → 性能优化 → 生产规范 → 实战项目 ↓ ↓ ↓ ↓ 2天 2天 2天 1天 ``` **学习目标**:掌握生产级开发规范和优化技巧 7. [测试与调试](docs/07-testing-debugging.md) - 表驱动测试 - Mock测试 - 性能分析 8. [生产最佳实践](docs/08-production-practices.md) ⭐⭐⭐ 重点 - Google/Uber Go规范 - 字节跳动/阿里性能实践 - 生产检查清单 9. [工具生态](docs/09-tooling-ecosystem.md) - 开发工具对照 - 常用库推荐 10. [实战项目](docs/10-hands-on-projects.md) - RESTful API服务 - 微服务系统 - Spring Boot迁移指南 ## 🚀 快速开始(5分钟) ### 1. 验证Go环境 ```bash go version # 确保 >= 1.21 ``` ### 2. 运行第一个Web服务 ```bash cd examples/02-web/gin-hello-world go mod tidy go run main.go ``` 访问 http://localhost:8080 查看结果 ### 3. 体验数据库操作 ```bash cd examples/03-database/gorm-crud go run main.go ``` ## 📖 文档导航 ### 核心文档(必读) | 文档 | 说明 | 优先级 | 预计时间 | |-----|------|--------|---------| | [思维转换](docs/01-java-to-go-mindset.md) | Java vs Go核心差异 | ⭐⭐⭐ | 2小时 | | [Web框架](docs/04-web-frameworks.md) | Gin/Echo实战 | ⭐⭐⭐ | 4小时 | | [数据库访问](docs/05-database-access.md) | GORM/sqlx使用 | ⭐⭐⭐ | 4小时 | | [微服务架构](docs/06-microservices.md) | gRPC和服务治理 | ⭐⭐⭐ | 6小时 | | [生产实践](docs/08-production-practices.md) | 大厂规范和优化 | ⭐⭐⭐ | 4小时 | ### 辅助文档 | 文档 | 说明 | 优先级 | |-----|------|--------| | [语言基础](docs/02-language-fundamentals.md) | 语法和数据结构 | ⭐⭐ | | [项目结构](docs/03-project-structure.md) | 代码组织规范 | ⭐⭐ | | [测试调试](docs/07-testing-debugging.md) | 测试和性能分析 | ⭐⭐ | | [工具生态](docs/09-tooling-ecosystem.md) | 开发工具链 | ⭐ | | [实战项目](docs/10-hands-on-projects.md) | 综合项目案例 | ⭐⭐ | ## 💻 示例代码 ### 基础示例 ``` examples/01-basics/ ├── variables/ # 变量和常量 ├── functions/ # 函数和方法 ├── structs/ # 结构体 └── interfaces/ # 接口 ``` ### Web开发示例 ⭐ ``` examples/02-web/ ├── gin-hello-world/ # 最简单的Gin应用 ├── gin-rest-api/ # 完整REST API(CRUD) ├── gin-middleware/ # JWT认证中间件 └── echo-example/ # Echo框架示例 ``` ### 数据库示例 ⭐ ``` examples/03-database/ ├── gorm-crud/ # GORM基础操作 ├── gorm-relations/ # 关联关系 ├── gorm-transactions/ # 事务处理 └── sqlx-example/ # sqlx使用 ``` ### 微服务示例 ⭐ ``` examples/04-microservices/ ├── grpc-service/ # gRPC服务端和客户端 ├── service-discovery/ # Consul服务发现 └── api-gateway/ # API网关 ``` ### 性能优化示例 ⭐ ``` examples/05-performance/ ├── goroutine-pool/ # Goroutine池 ├── sync-pool/ # sync.Pool使用 └── profiling/ # pprof性能分析 ``` ## 🔄 Java vs Go 技术栈对照 | 场景 | Java生态 | Go生态 | 说明 | |-----|---------|--------|------| | **Web框架** | Spring Boot | Gin / Echo | Go框架更轻量,性能更高 | | **ORM** | MyBatis-Plus | GORM | GORM API更简洁 | | **微服务** | Spring Cloud | gRPC + Go-Micro | Go原生支持高并发 | | **依赖管理** | Maven / Gradle | Go Modules | Go模块系统更简单 | | **测试框架** | JUnit + Mockito | testing + gomock | Go内置测试支持 | | **日志** | Logback / Log4j | zap / zerolog | Go日志库性能极高 | | **监控** | Micrometer | Prometheus client | Go天然适合云原生 | | **配置管理** | Spring Config | Viper | Go配置更灵活 | | **服务发现** | Eureka | Consul / etcd | Go生态更云原生 | | **API网关** | Spring Gateway | Traefik / Kong | Go网关性能更好 | ## 🎓 推荐学习顺序 ### 方案A:快速上手(适合有项目压力) 1. 阅读 [思维转换](docs/01-java-to-go-mindset.md)(2小时) 2. 运行 `examples/02-web/gin-hello-world`(30分钟) 3. 学习 [Web框架](docs/04-web-frameworks.md)(4小时) 4. 完成 `examples/02-web/gin-rest-api`(1天) 5. 边做边学,遇到问题查阅其他文档 ### 方案B:系统学习(适合有充足时间) 1. 按文档顺序学习(01 → 10) 2. 每学完一章,运行对应示例代码 3. 完成每章的练习题 4. 最后完成综合实战项目 ### 方案C:专项突破(适合特定需求) **只做Web开发**: - 01思维转换 → 02语言基础 → 04Web框架 → 05数据库 **只做微服务**: - 01思维转换 → 02语言基础 → 06微服务 → 08生产实践 **性能优化**: - 02语言基础 → 07测试调试 → 08生产实践 ## 💡 学习建议 ### 给Java工程师的建议 1. **忘记继承,拥抱组合** - Go没有类继承,使用组合和接口 - 这是最大的思维转变 2. **习惯错误返回值** - Go不使用异常,函数返回error - 显式错误处理让代码更可靠 3. **理解指针但不要怕** - Go的指针比C简单得多 - 主要用于避免拷贝和修改原值 4. **善用Goroutine** - 比Java线程轻量1000倍 - 但要注意资源管理 5. **接受简洁哲学** - Go没有花哨特性 - 代码简单直接才是美 ### 常见陷阱 - ❌ 试图用Java的OOP思维写Go - ❌ 过度使用接口和抽象 - ❌ 忽略错误处理 - ❌ 不关闭资源(defer很重要) - ❌ 滥用Goroutine导致资源泄漏 ### 最佳实践 - ✅ 先写能跑的代码,再优化 - ✅ 多看标准库源码学习惯用法 - ✅ 使用gofmt格式化代码 - ✅ 编写表驱动测试 - ✅ 用pprof分析性能瓶颈 ## 🛠️ 开发环境设置 ### 推荐IDE 1. **GoLand**(JetBrains,类似IntelliJ IDEA) - 最强大的Go IDE - 适合Java工程师无缝切换 2. **VS Code + Go插件** - 轻量级,免费 - 插件生态丰富 ### 必装工具 ```bash # 代码格式化 go install golang.org/x/tools/cmd/goimports@latest # 静态分析 go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest # 热重载(类似Spring DevTools) go install github.com/cosmtrek/air@latest # Mock生成 go install github.com/golang/mock/mockgen@latest ``` ### 配置VS Code 创建 `.vscode/settings.json`: ```json { "go.useLanguageServer": true, "go.formatTool": "goimports", "go.lintTool": "golangci-lint", "go.lintOnSave": "package", "editor.formatOnSave": true } ``` ## 📊 学习进度追踪 建议创建学习笔记,记录: - [ ] 完成思维转换文档 - [ ] 运行第一个Gin应用 - [ ] 完成GORM CRUD示例 - [ ] 实现JWT认证中间件 - [ ] 完成gRPC服务示例 - [ ] 应用性能优化技巧 - [ ] 完成综合实战项目 ## 🤝 贡献指南 欢迎提交Issue和Pull Request: - 发现文档错误或不清楚的地方 - 补充更好的示例代码 - 分享学习心得和最佳实践 - 提出改进建议 ## 📝 许可证 MIT License ## 🔗 相关资源 ### 官方文档 - [Go官方文档](https://go.dev/doc/) - [Go标准库](https://pkg.go.dev/std) - [Effective Go](https://go.dev/doc/effective_go) ### 推荐阅读 - [Uber Go Style Guide](https://github.com/uber-go/guide) - [Google Go Style Guide](https://google.github.io/styleguide/go/) - [Go Code Review Comments](https://github.com/golang/go/wiki/CodeReviewComments) ### 社区 - [Go语言中文网](https://studygolang.com/) - [Go夜读](https://github.com/talkgo/night) - [Go语言101](https://gfw.go101.org/) --- **开始学习**: [Java到Go的思维转换](docs/01-java-to-go-mindset.md) →