🚀 Golang 开发
Go语言由Google于2009年发布,专注于简洁、高效、并发。云原生时代的首选语言。
学习时间线
2020年11月 - 2021年6月(8个月)
阶段一:基础入门(2020-11)
Go环境搭建、工具链
基础语法、数据类型
函数、方法、接口
错误处理
阶段二:并发编程(2020-12)
goroutine调度模型
channel通信
sync包同步原语
context包
阶段三:Web开发(2021-02)
HTTP标准库
Gin框架
数据库操作(GORM)
RESTful API
阶段四:微服务(2021-04)
服务注册与发现
gRPC通信
消息队列
链路追踪
阶段五:性能优化(2021-06)
pprof性能分析
内存优化
并发优化
GC调优
学习文档
01-环境搭建.md - Go安装、工具链、开发环境
02-基础语法.md - 数据类型、控制结构、函数、接口
03-并发编程.md - goroutine、channel、sync、context
04-Web开发.md - HTTP、Gin、数据库、RESTful
05-微服务.md - 微服务架构、gRPC、服务治理
06-性能优化.md - pprof、benchmark、内存优化
Go核心特性
语言特性
简洁语法:25个关键字,学习曲线平缓
静态类型:编译期类型检查,运行时性能高
垃圾回收:自动内存管理,无需手动释放
接口隐式实现:鸭子类型,解耦灵活
defer机制:资源清理优雅
并发模型
goroutine:轻量级线程,栈初始2KB
channel:类型安全的通信管道
select:多路复用,优雅处理多channel
context:传递取消信号和超时控制
GMP调度:高效的M:N调度模型
工具链
go build:快速编译,单一二进制
go test:内置测试框架,benchmark支持
go mod:依赖管理,语义化版本
gofmt:自动格式化,统一代码风格
go vet:静态分析,发现潜在错误
pprof:性能分析,定位瓶颈
项目实践
练习项目
CLI工具 - 文件处理、命令行参数解析
HTTP服务器 - RESTful API、数据库集成
并发爬虫 - goroutine池、channel通信
微服务系统 - gRPC、服务发现、链路追踪
实战技术栈
Web框架:Gin、Echo、Fiber
ORM:GORM、ent、sqlx
数据库:MySQL、PostgreSQL、Redis、MongoDB
消息队列:Kafka、RabbitMQ、NATS
RPC:gRPC、Thrift
配置:Viper、etcd
日志:logrus、zap
监控:Prometheus、Grafana
追踪:Jaeger、Zipkin
学习资源
官方文档
Go官网:https://go.dev
Go Tour:https://go.dev/tour/
Effective Go:https://go.dev/doc/effective_go
Go标准库:https://pkg.go.dev/std
推荐书籍
《Go程序设计语言》(The Go Programming Language)
《Go语言实战》(Go in Action)
《Go并发编程实战》
《Go Web编程》
开源项目
Docker - 容器引擎
Kubernetes - 容器编排
etcd - 分布式键值存储
Prometheus - 监控系统
Gin - Web框架
GORM - ORM框架
应用场景
云原生基础设施
Docker、Kubernetes容器技术
etcd、Consul服务发现
Prometheus、Grafana监控
Envoy、Istio服务网格
Web后端
微服务API
高并发Web服务
RESTful/gRPC服务
WebSocket实时通信
DevOps工具
kubectl、helm命令行工具
部署脚本、自动化工具
日志收集、监控代理
区块链
Ethereum(Geth)
Hyperledger Fabric
最佳实践
代码规范
使用
gofmt自动格式化遵循Effective Go指南
导出标识符大写,未导出小写
接口名以
er结尾包名小写单词,无下划线
错误处理
每个error都检查
错误包装用
fmt.Errorf("%w", err)自定义错误实现Error()接口
使用errors.Is/As判断错误类型
并发编程
不要通过共享内存通信,通过通信共享内存
关闭channel由发送方负责
使用context传递取消信号
限制goroutine数量(worker pool)
用
-race检测竞态条件
性能优化
先测量,后优化(pprof、benchmark)
预分配slice容量
使用sync.Pool复用对象
字符串拼接用strings.Builder
简单计数用atomic,复杂用mutex
项目结构
project/
├── cmd/ # 可执行文件入口
├── internal/ # 私有代码
├── pkg/ # 可导出的库
├── api/ # API定义(proto、OpenAPI)
├── configs/ # 配置文件
├── scripts/ # 脚本
├── deployments/ # 部署配置(Docker、K8s)
├── go.mod
└── README.md
学习心得
Go哲学简洁:少即是多,避免过度设计
并发是核心:理解goroutine和channel是关键
标准库强大:大部分需求标准库已覆盖
工具链完善:开发、测试、部署一站式
社区活跃:云原生领域事实标准
性能优秀:接近C,远超动态语言
部署简单:单一二进制,无依赖
错误处理显式:冗余但清晰
接口灵活:鸭子类型,解耦优雅
适合团队:gofmt统一风格,无争议
核心: Go是实用主义语言,为工程效率而生,云原生时代的最佳选择。